不幸的是沒有。模板機制只允許您使用類型的通用性,也就是創建可以使用多種類型的函數/對象,或者針對不同的輸入類型具有稍微不同的實現,或者根據模板參數等形成返回類型。通常,模板元編程引入了所謂的靜態多態性。這是一個compiler
階段的功能(檢出compilation stages),這意味着它是在所有名稱都固定後完成的(即使編譯器決定將其與int
參數一起使用,功能foo()
也將始終被調用爲foo
)。
你試圖實現的是進入proprocessor
階段,其中可以使用preprocessor directives修改源代碼。這是你可以使用宏來玩的時刻。爲了您例如,你可以使用這樣的事情:
#include <iostream>
using namespace std;
#define MySmartTemplate(StructName, Func1Name, Func1ArgType, Func2Name, Func2ArgType) \
struct StructName \
{ \
void Func1Name(Func1ArgType val) { cout << "func1" << endl; } \
void Func2Name(Func2ArgType val) { cout << "func2" << endl; } \
};
MySmartTemplate(MyStruct, foo, int, bar, double);
int main()
{
MyStruct myStruct;
myStruct.foo(1);
myStruct.bar(1);
}
Live demo
當然,你可以使用宏與模板,這將讓您有更多的靈活性。
不,但可以使用預處理器宏。 – CoffeeandCode
簡而言之,答案是否定的,這是不可能的,反正不是。 –