我想提出兩個模板類型的組合的繼承像這樣的例子類:繼承
#include <vector>
#include <set>
template<typename T, typename Base=std::vector<T>>
class A : public Base
{
};
int main()
{
A<int> a;
A<int, std::set<int>> b;
return 0;
}
但現在,我想能夠寫
A<int, std::set> b;
代替
A<int, std::set<int>> b;
我怎麼能這樣做嗎? 謝謝! :)
解決方案從@Piotr S.
在這裏,我轉貼由彼得S.給予所以這個非常漂亮的答案很容易找到其他人(不要忘記把票投給他的答案的完整解決方案: - P):
#include <vector>
#include <set>
#include <utility>
#include <iostream>
template <template <typename...> class> struct tag {};
template <typename T, template <typename...> class Base = std::vector>
class A : public Base<T>
{
public:
void add(const T& t)
{
return _add(tag<Base>{}, t);
}
private:
void _add(tag<std::set>, const T& t)
{
std::cout << "set\n";
Base<T>::insert(t);
}
void _add(tag<std::vector>, const T& t)
{
std::cout << "vector\n";
Base<T>::push_back(t);
}
};
int main()
{
A<int> a;
A<int, std::set> b;
a.add(1);
b.add(1);
}
是的,我卡住了這個錯誤,但我不知道是否有很好的解決方案來解決這個問題.. – StormRider
嘛pparently有:)我也沒有意識到這一點:) –