__LINE__ поломался
Есть такая штука:
#define V(type, name) vector<type> name
#define VV_make(type, name, dim1, dim2, value, line) V(type, init##line)(dim2, value); V(vector<type>, name)(dim1, init##line)
#define VV(type, name, dim1, dim2, value) VV_make(type, name, dim1, dim2, value, __LINE__)
При таком обращении к ней:
VV(int, arr, 30, 50, 7);
Она разворачивается в это:
vector<int> init__LINE__(50, 7);
vector<vector<int>> arr(30, init__LINE__);
А я хочу это:
vector<int> init25(50, 7);
vector<vector<int>> arr(30, init25);
ЧЯДНТ?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Если не ошибаюсь (а может, и ошибаюсь...) - то попробуйте так:
#define V(type, name) vector<type> name
#define VAL(i,x) i##x
#define VV_make(type, name, dim1, dim2, value, line) V(type, VAL(init,line))(dim2, value); V(vector<type>, name)(dim1, VAL(init,line))
#define VV(type, name, dim1, dim2, value) VV_make(type, name, dim1, dim2, value, __LINE__)
В VC++ вроде работает...