Como dice el comentario, no se puede hacer eso. El preprocesador no hace ese tipo de cosas.
De modo que o bien usted sigue lo que @Shahbaz dijo en el primer comentario, o hace algo como esto que le da get y un conjunto de formularios get_count
y 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
Nótese que la variable se declara en la sección private
y su nombre es m_count
, y las funciones son definidas (no sólo declarada) en la sección public
.
O bien, puede pasar Count
en lugar de count
en la macro como:
property(int, Count);
Si es así, entonces se podría crear la variable como m_Count
y funciona como getCount
y setCount
. Eso es lo más cercano a lo que quieres.
Eso no es posible. Sin embargo, podría cambiar su macro: 'propiedad (int, count, Count)' (o 'property (int, c, C, ount)' para minimizar la duplicación (no lo haga, era una broma)) – Shahbaz
This isn Java. En el estilo aceptado de C++, las funciones deben llamarse 'get_x()' y 'set_x()' (excepto que la longitud o el conteo deben llamarse 'size()' y 'resize()'). –
Si, como sugiere su macro, su variable es pública, ¿para qué preocuparse por los usuarios? – Nick