我想請求一系列從庫,這需要我的數據到指定兩種類型:C++組合模板擴展
class a;
class b;
class c;
template<typename A, typename B> void get() {....}
void get_all() {
get<a,a>()
get<a,b>()
get<a,c>()
get<b,a>()
get<b,b>()
// etc...
}
我想調用get < A,B >功能的每個組合一組類(約10種不同的變體) - 意味着大約100個不同的調用。我寧願不手動編寫所有那些get()調用。
有什麼方法可以自動生成這些調用嗎?我想我可以使用預處理器宏,但我很好奇,是否有辦法生成這樣一個組合列表,給定a,b,c,d ...使用模板代碼。
編輯:次要複雜:事實上,這都是在一個成員函數中。
template<typename A, typename B>
void Getter::get()
{
auto assn = fMemberObject->RetrieveAllDataOfType<association<A,B>();
.. do stuff with assn ...
}
void Getter::get_all() {
get<a,a>();
}
所以,代碼需要處理與模板一起傳遞this
。 此外,C++ 11可能是據我要推的語言,如果可能的話....
編輯2: 原來我想避免重複的情況下<a,a>
和<b,b>
......
我會寫一個腳本,生成的代碼。或者看看設計,看看我能否想出一些不需要我去做所有這些調用的東西。也許如果你告訴我們你試圖用這樣的代碼解決的問題,我們也許可以幫助你提出一個更好的解決方案? ([關於XY問題的相關閱讀](http://xyproblem.info/),你的問題就是一個例子。) –
你對結果做了什麼? ''真的''do_some_action'?因爲帶有'void'返回類型的'get'不是很有意義。 – GManNickG
@GManNickG我懷疑'get()'有副作用,但是從OP的說明會很好。 – cdhowie