c++ - 在类模板中推导模板成员函数

标签 c++ templates

为什么不能Tfn推导出来下例中的签名?

template<int I>
struct Class {
    template<typename T>
    Class &operator <<( void (*)(const Class<I> &, const T &) ) { return *this; }
};

struct Ot { };

template<int I>
void fn(const Class<I> &, const Ot &) { }

int main() {
    Class<1>() << fn;
}

相比之下,下面的例子没有operator<<成为正式成员(member)是合法的:

template<int I>
struct Class {
    Class &operator <<( void (*)(const Class<I> &) ) { return *this; }
};

struct Ot { };

template<int I>
void fn(const Class<I> &) { }

int main() {
    Class<1>() << fn;
}

最佳答案

因为就像你在使用 Class<1>而不是 Class ,您必须向函数模板提供模板参数 fn还有:

Class<1>() << fn<1>;

此外,您可能希望从 operator << 返回一个引用:

template<typename T>
Class & operator <<( void (*)(const Class<I> &, const T &) ) { return *this; }
      ^

关于c++ - 在类模板中推导模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628300/

相关文章:

c++ - 用于从 std::vector (或其他序列)读取的流语法?

c++ - 错误 : expected primary expression before `>` token

c++ - Gtest 和 Gmock - 双重自由或腐败

c++ - sql connectionstring调试一步一步?

c++ - 如果不是手动完成,子类是否会继承父类的析构函数?

c++ - 可变参数模板参数的模板类型数组

c++ - C++ 程序和 cmd 控制台之间的管道

c++ - gcc 中的模糊重载,适用于 msvc

c++ - 模板参数推导/替换失败,lambda 作为函数指针

c++ - 调用默认构造函数时模板可变参数编译错误