【发布时间】:2018-01-22 14:27:09
【问题描述】:
我正在编写一个容器类,并希望提供一个以迭代器为参数的构造函数,但前提是底层迭代类型与容器类型匹配。
所以我写了:
template<typename T>
class Buffer
{
public:
template <typename InputIter>
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIter>::value_type, typename T>>::type
Buffer(InputIter first, InputIter last)
{
}
};
但是我有编译错误说模板参数 1 和 2 无效
怎么了?
此处带有编译器的代码:https://onlinegdb.com/SyIqN_mBG
【问题讨论】:
-
构造函数不应返回任何类型,如果它不是构造函数,则不应与包含它的类同名...
-
好的,我明白了,我已经从另一个示例中复制/粘贴了 enable_if 行,但没有弄清楚它最后返回了一个类型。但是,我找不到如何使用 enable_if 启用构造函数
-
把错误信息贴出来供以后参考
-
@W.F.实际上在标准中,构造函数是没有名称的概念成员(因此无法使用类成员访问来调用它们)[class.ctor]/1:构造函数没有名称。
-
@Oliv 确实如此,尽管您不能拥有一个函数,其名称为包含它的类,对吗? :)
标签: c++ templates template-meta-programming