我想有一个包装容器的模板类,但我想根据模板参数的值选择要包装的容器。 类似的东西:
template<typename T>
class A{
std::vector<T> MyContainer;
// ...
}
template<>
class A<bool>{
std::deque<bool> MyContainer;
// ...
}
但避免模板专业化涉及的所有代码重复。我试图看看std::enable_if
是否可以帮助我做一些技巧,但我没有想到任何办法。
答案 0 :(得分:4)
可以将std::conditional
用作Nawaz said:
#include <type_traits>
template <typename T>
using MyContainerType = typename std::conditional<
std::is_same<T, bool>::value,
std::deque<T>,
std::vector<T>
>::type ;
template<typename T>
class A{
//std::vector<T> MyContainer;
// ...
MyContainerType<T> C;
} ;
答案 1 :(得分:3)
你可以这样做:
typedef typename boost::mpl::if_c<
std::is_same<T, bool>::value,
std::deque<T>,
std::vector<T>
>::type MyContainerType;
请参阅reference。
或者可以写自己的:
typedef typename ContainerSelector<T>::type MyContainerType;
其中:
template <typename T>
struct ContainerSelector {
typedef std::vector<T> type;
};
template <>
struct ContainerSelector<bool> {
typedef std::deque<bool> type;
};