C++ 简单类型说明符不支持nullptr类型
我希望有一个函数C++ 简单类型说明符不支持nullptr类型,c++,templates,c++11,C++,Templates,C++11,我希望有一个函数fn,它接受指向const和非const对象的指针集。我正在写一个模板来做这件事 template<typename T1, typename T2, std::enable_if<std::is_same<T1,NodeType *>::value && std::is_same<T2,EdgeType *>::value, std::nullptr_t>::type = nullpt
fn
,它接受指向const
和非const
对象的指针集。我正在写一个模板来做这件事
template<typename T1,
typename T2,
std::enable_if<std::is_same<T1,NodeType *>::value && std::is_same<T2,EdgeType *>::value, std::nullptr_t>::type = nullptr>
static void fn(unordered_set<T1> &nodeSet, unordered_set<T2>& edgeSet);
模板
静态无效fn(无序集和节点集、无序集和边集);
在上面的示例中,我希望能够传递无序集
以及无序集
(simliar withEdgeType
)。但是,我得到一个错误:
简单类型说明符不支持“nullptr类型”
。有人能帮忙吗?除了您缺少的一些typename
之外,要实现这一点,您应该使用std::remove\u const
和std::remove\u pointer
类型特征:
template<typename T1, typename T2,
typename std::enable_if<
std::is_same<typename std::remove_const<typename std::remove_pointer<T1>::type>::type, NodeType>::value &&
std::is_same<typename std::remove_const<typename std::remove_pointer<T2>::type>::type, EdgeType>::value,
typename std::nullptr_t>::type = nullptr>
static void fn(std::unordered_set<T1> &nodeSet, std::unordered_set<T2>& edgeSet);
template::type=nullptr>
静态无效fn(标准:无序集和节点集,标准:无序集和边集);
用
,int>替换,std::nullptr\u t>::type=nullptr
:type=0
我确实想到了这一点。但是你能告诉我为什么nullptr
不起作用吗?这个错误一点帮助都没有,但是你只是缺少了一个typename
。我最后把它保留为T1和T2,并添加了一个静态断言。一种方法比另一种好/坏吗?另外,我在某处读到,模板参数上的cv限定符被忽略了。我显然误解了。你能告诉我这是什么意思吗?在第一个问题上,一切都是在编译时确定的,因此在第二个问题上,两种解决方案中的任何一种听起来都与我相同: