Так я не понял, тебе константы нужны или макрос?
Ты же сам писал про ф-ю?
где F() - это некая процедура препроцессора (или что-то типа того)
А необходимый вариант
#define DEF1 333
int var = DEF1;
CString txt = "значение DEF1 = " F(DEF1) " попугаев";
Можно получить кучей других не менее сложных способов:
#define DEF1 333
int var = DEF1;
CString txt = "значение DEF1 = ";
txt += CMyString(DEF1) + " попугаев";
Ну и уж если так хочется, то CMyString можешь расширить на любые конструкторы, которые тебе надо, например для данного случая:
CMyString(char*,int,char*)
тогда в "одну строчку" записываем
#define DEF1 333
int var = DEF1;
CString txt = CMyString("значение DEF1 = ", DEF1," попугаев");
Можно расширить объек и ввести поле данных int, и сделать оператор преобразования типа int, чтобы от возвращал это значение. Правда надо будет перегрузить стандартный и другие конструкторы, "но это уже, как говорит наш многоуважаемый шеф, дело техники" (с)
Тогда ты вобще можешь делать с объектом что хочешь:
class CMyString : public CString
{
public:
CMyString(int nIntVal)
{
m_nVal = nIntVal;
Format(_T("%d"), nIntVal);
}
operator int()
{
return m_nVal;
}
private:
int m_nVal;
};
void ShowIncrementIntVal(int nVal)
{
nVal++;
AfxMessageBox(DIGIT_STR(nVal));
}
CMyString st(10);
AfxMessageBox(st); // здесь строка
ShowIncrementIntVal(st); // здесь целый тип