Вот узнал (спасибо open-source'у

), что с помощью макросов типа
#define glue( x, y ) x ## y
можно "сшивать" имена в коде статически.
И стало интересно, можно ли такое провернуть динамически?
Интересно как для Windows так и для Linux. Если кто знает, подскажите пожалуста.
Вот мои соображения по поводу Windows варианта
Получается если бы я зашил функции в длл то используя GetProcAddress() можно получить адрес функции исспользуя ее имя.
Можно ли использовать GetProcAddress() также и для выполняемого в данное время ехе-модуля получив его Handle?
Или лучше использовать какую-то свою таблицу для соответствия имени фукции и ее адреса?
Здравствуйте, Аноним, Вы писали:
Вот узнал (спасибо open-source'у
), что с помощью макросов типа
#define glue( x, y ) x ## y
можно "сшивать" имена в коде статически.
И стало интересно, можно ли такое провернуть динамически?
Интересно как для Windows так и для Linux. Если кто знает, подскажите пожалуста.
Не совсем понятен вопрос. Что значит 'такое провернуть диначмиески'? Образец псевдокода?
Когда в C++ пишется
int nVar;
nVar = 0;
То при изготовлении .exe файла 'nVar' заменяется адресом — на стеке там или где удобно. Соответственно, с точки зрения получения кода из исходника, имя переменной nVar — это удобно читаемый человеком адрес в памяти, размером в N байт. Непосредственно при выполнении программы в ней ТЕКСТ 'nVar' не учавствует — только цифра, обозначающая адрес (смещение в случае стека). Как можно в рантайме склеивать то, чего в рантайме по определению нет?
Получается если бы я зашил функции в длл то используя GetProcAddress() можно получить адрес функции исспользуя ее имя.
Можно ли использовать GetProcAddress() также и для выполняемого в данное время ехе-модуля получив его Handle?
Чтобы получить адрес функции с помощью GetProcAddress, эта функция должна быть прописана в .exe файле в разделе 'торчащие наружу функции'

(export table). Если функции в этой таблице нету (обычно для .exe), то нет и ее имени.
Или лучше использовать какую-то свою таблицу для соответствия имени фукции и ее адреса?
Лучше — для чего? Есть какая-то задача которую нужно решить или просто хочется задней левой пяткой почесать правое верхнее ухо?
Здравствуйте, EyeOfHell
Спасибо, теперь до конца разобрался.
EOH>Лучше — для чего? Есть какая-то задача которую нужно решить или просто хочется задней левой пяткой почесать правое верхнее ухо? 
Пока и вправду
EOH> просто хочется задней левой пяткой почесать правое верхнее ухо
Это я так с заделом на будущее интересуюсь, для задач когда нужно вызвать функцию у которой имя складывается с двух частей в зависимости от того, что нужно сделать, без написания кучи "if-else if" для всех возможных вариантов.
День добрый
Это я так с заделом на будущее интересуюсь, для задач когда нужно вызвать функцию у которой имя складывается с двух частей в зависимости от того, что нужно сделать, без написания кучи "if-else if" для всех возможных вариантов.
Это решается другими способами. Можно через полиморфизм, можно просто по справочной таблице, можно еще десятком вариантов. Например, если скорость не нужна (не компилируется, просто для примера):
typedef void (*TFunction)(int);
void ProcessTest(int i_nID)
{
}
void ExecuteTest(int i_nID)
{
}
std::map<std::string, TFunction> g_mTable;
g_mTable["ProcessTest"] = ProcessTest;
g_mTable["ExecuteTest"] = ExecuteTest;
void Test(void)
{
g_mTable[std::string("Process") + "Test"](1);
}