2

現在のスコープまたは名前空間で関数を生成するための次のマクロがあります。

#define MAKE_FUNC(FNAME) \
template <typename T> \
T ##FNAME## (const T& t) \
{\
   return t; \
}

MAKE_FUNC(foo)
MAKE_FUNC(boo)

int main()
{
   foo(1);
   boo(2);
}

上記のコードをコンパイルすると、次のエラー メッセージが表示されます。

prog.cpp:8:1: error: pasting "Tfoo" and "(" does not give a valid preprocessing token
prog.cpp:9:1: error: pasting "Tboo" and "(" does not give a valid preprocessing token
prog.cpp:8: error: ISO C++ forbids declaration of ‘Tfoo’ with no type
prog.cpp:9: error: ISO C++ forbids declaration of ‘Tboo’ with no type
prog.cpp: In function ‘int main()’:
prog.cpp:13: error: ‘foo’ was not declared in this scope
prog.cpp:14: error: ‘boo’ was not declared in this scope

http://ideone.com/paiu1

連結が失敗したようですが、とにかくこの問題の周りにありますか?

4

1 に答える 1

10

あなたがしたい

T FNAME (const T& t) \

##連結しますが、連結したくありません。

于 2012-05-15T20:30:39.063 に答える