Khi nhận xét cho biết, bạn không thể làm điều đó. Preprocessor không làm những điều đó.
Vì vậy, bạn hãy làm theo những gì @Shahbaz đã nói trong bình luận đầu tiên, hoặc làm điều gì đó như thế này cho phép bạn nhận và đặt các mẫu get_count
và set_count
.
#define property(T, x) private : T m_## x; \
public : T get_## x() { return m_## x;} \
void set_## x (T value) { m_## x = value; }
class foo {
public:
property(int, count);
property(float, size);
};
int main() {
foo f;
f.set_count(10);
std::cout << f.get_count() << std::endl;
return 0;
}
Quick demo at ideone
Lưu ý rằng các biến được khai báo trong phần private
và tên của nó là m_count
, và các chức năng được định nghĩa (không chỉ tuyên bố) trong phần public
.
Hoặc, bạn có thể vượt qua Count
thay vì count
trong vĩ mô như:
property(int, Count);
Nếu bạn làm như vậy, sau đó bạn có thể tạo ra các biến như m_Count
và có chức năng như getCount
và setCount
. Đó là gần nhất với những gì bạn muốn.
Điều đó là không thể. Bạn có thể thay đổi macro của bạn mặc dù: 'property (int, count, Count)' (hoặc 'property (int, c, C, ount)' để giảm thiểu trùng lặp (không làm điều đó, nó là một trò đùa)) – Shahbaz
This isn 't Java. Trong kiểu C++ được chấp nhận, các hàm nên được đặt tên là 'get_x()' và 'set_x()' (ngoại trừ chiều dài hoặc số đếm phải được đặt tên là 'size()' và 'resize()'). –
Nếu - như macro của bạn đề xuất - biến của bạn là công khai, tại sao phải bận tâm với người truy cập? – Nick