我有一個名爲MySet
的自定義集合,一個整數應該傳遞給MySet
的構造函數來構造它。我想寫一個函數來初始化MySet
的std::vector
。 我希望這個功能也能夠初始化std::vector
的std::set <int>
。根據C++模板函數中的typename調用不同的構造函數
類似:
template<typename S>
void init(std::vector<S> &v, int n){
v.reserve(n);
for(int i=0; i<n; i++){
if(std::is_same<S, MySet>::value){
v.push_back(S(42));
}
else{
v.push_back(S());
}
}
return;
}
是否有可能解決,而不使用函數重載上init
這個問題?
'if(std :: is_same
:: value)'不,這不是如何進行元編程。在你的簡單情況下,它可能會起作用,但是當兩個分支不能同時有效時,你會在這裏問爲什麼。 – StoryTeller您可能對['constexpr if'](http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0128r1.html)感興趣,它可能會使它成爲C++ 17和會解決你的問題。 – TartanLlama
@StoryTeller事實上,在這種情況下,我得到了一個錯誤,因爲沒有設置(int) –
dacapo1142