我在理解C++宏連接方面有點麻煩。C++宏連接
目前,我有很多共享相同名稱的靜態函數的類。例如:
ClassA::MyFunc1, ClassA::MyFunc2, ClassA::MyFunc3
ClassB::MyFunc1, ClassB::MyFunc2, ClassB::MyFunc3
ClassC::MyFunc1, ClassC::MyFunc2, ClassC::MyFunc3
我有一個接口用於根據類型調用靜態函數。例如:
ClassInterface::MyFunc1(Type)
{
switch (Type)
{
case TypeA:
{
ClassA::MyFunc1();
}
case TypeB:
{
ClassB::MyFunc1();
}
case TypeC:
{
ClassC::MyFunc1();
}
}
}
所以這就是通過一個接口按類型調用MyFunc1。很顯然,如果我有50個課程和50個靜態函數,那麼每次寫入它們都會令人沮喪。
我想寫一個宏以節省自己很多時間。
#define MyMacro(x) \
case TypeA: \
{ \
ClassA::##x; \
} \
\
case TypeB: \
{ \
ClassB::##x; \
} \
\
case TypeC: \
{ \
ClassC::##x; \
}
然後使用它像這樣:
ClassInterface::MyFunc1(Type)
{
switch (Type)
{
MyMacro(MyFunc1)
}
}
不過,我得到一個錯誤,告訴我X(宏觀內)是一個未聲明的標識符。任何人都可以在這裏給我一隻手嗎?
使用Visual Studio 2013 ...
錯誤C2065: 'X':未聲明的標識符
錯誤C2143:語法錯誤:缺少 ';'前 '的情況下'
錯誤C2039: 'X':不是 'ClassA的'
錯誤C2039的成員: 'X':不是 'ClassB的'
錯誤C2039的成員:' x':不是'ClassC'的成員
請不要給雜七雜八的代碼塊與錯誤描述。給出一個堅實,完整的[MCVE](http://stackoverflow.com/help/mcve),其中包含精確的編譯器錯誤。 – chris 2014-12-05 02:14:10
你爲什麼要這樣做?你基本上已經用'switch'語句和類型代碼重新實現了虛函數調度? – b4hand 2014-12-05 02:20:13
我有采用這種設計很好的理由和背景是完全不相干的問題,這就是爲什麼我一直在使用這個例子簡化。 – 2014-12-05 02:23:29