Вы можете сделать это с помощью шаблонов:
template < int someConstant = 123 > class SomeClass
{
public:
void outputConstant() { cout << "We think the answer is:" << someConstant; }
}
Но это не совсем то, что вы хотите, потому что вы должны объявить экземпляр класса как:
int main(int argc, char *argv)
{
SomeClass<123> myInstance;
}
Я знаю, что другие объясняли немного о макросах, но позвольте мне добавить: #define
обрабатывается препроцессором, а не компилятором. В стандарте есть раздел, называемый «фазами перевода», который объясняет это более подробно, но для вашего вопроса дело в том, что макросы оцениваются до того, как класс даже скомпилирован, а область действия #define неизвестна.
Авторитетная книга на эту тему (программирование с помощью шаблонов на этапе компиляции): Современный дизайн на C ++: применение шаблонов общего программирования и проектирования, Андрей Александреску .