Re[3]: Чудны способности твои, о стандарт !
От: Evgeny.Panasyuk Россия  
Дата: 30.09.15 22:19
Оценка: 3 (2) +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Допусти, что все строки в программе обрамлены макросом:

BFE>
BFE>void fun()
BFE>{
BFE>    std::cout << TT("asdf") << std::endl;
BFE>}
BFE>

BFE>Можно ли сделать так, чтобы была создана глобальная переменная содержащая список всех таких строк. Это может быть полезно при переводе сообщений на другой язык.

Если трюк описанный выше соответствует стандарту, то получается что-то типа:
#include <iostream>
#include <vector>

using namespace std;

vector<const char *> strings;

template<class T>
T run_it = T{};

#define GETTEXT(x) \
    [] \
    { \
        struct Action { Action() { strings.push_back(x); } };\
        (void)run_it<Action>; \
        return x; \
    }() \
/**/

void not_used()
{
    const char *x = GETTEXT("first");
    auto y = GETTEXT("second");
}

int main()
{    
    for(auto x : strings)
        cout << x << endl;
}
LIVE DEMO on Coliru GCC:
first
second
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.