我希望有这样的东西:
std::cout << std::is_same<Buffer<int>, Buffer<float>>::value;
但是我不想比较整个类型,而只想知道类型是否是缓冲区。
std::cout << std::is_buffer<Buffer<int>>::value // true;
std::cout << std::is_buffer<Buffer<float>>::value // true;
这可能吗?也许借助模板模板?
答案 0 :(得分:3)
只是做一个简单的特质:
#include <type_traits>
template<typename T>
struct is_buffer : std::false_type {};
template<typename T>
struct is_buffer<Buffer<T>> : std::true_type {};
但这并没有考虑到cv-qualifiers。
如果你想考虑cv-qualifiers,你只需要将它专门化一点:
template<typename T>
struct is_buffer<const T> : is_buffer<T> {};
template<typename T>
struct is_buffer<volatile T> : is_buffer<T> {};
答案 1 :(得分:2)
您可以实现如下的特征类:
#include <type_traits>
template<class T> struct is_buffer : std::false_type {};
template<class T> struct is_buffer<Buffer<T> > : std::true_type {};
答案 2 :(得分:1)
template<typename T>
class is_buffer : public std::false_type
{ };
template<typename T>
class is_buffer<Buffer<T>> : public std::true_type
{ };
因此,如果模板参数的类型为is_buffer
,则将使用继承std::true_type
的{{1}},否则将使用Buffer<T>
。