【发布时间】:2020-07-07 12:58:23
【问题描述】:
#include <functional>
#include <iostream>
class Plain {
public:
template <typename Type>
void member_function(const Type& s) {
std::cout << "Recived: " << s << std::endl;
}
};
template <typename Type>
class Templated : private Plain {
public:
};
int main() {
Plain b;
b.member_function<int>(10); // done!
Templated<int> d;
// d.member_function(); /* how to achive this */
return 0;
}
我正在尝试通过两种方法调用class Plain 中的成员函数:
- 在调用函数时创建非模板类和填充类型
Plain p;
p.member_function<int>();
- 在创建类时传递类型并在没有模板参数的情况下调用
Templated<int> t;
t.member_function(); // achive this
我尝试在派生类中绑定函数,例如
struct Plain{
template<typename T>
static void member_function(const T& s){std::cout << s << std::endl;}
}
template<typename T>
struct Templated : private Plain {
std::function<void(const T&)> print = Templated::Plain::member_function;
}
然后我就可以了
Templated t<std::string>;
t.print();
【问题讨论】:
-
我不确定我是否理解。你想让
d.member_function();做什么?我了解您想要此模板的int版本,但您没有将所需的参数传递给它。另外,您显示的print版本似乎不起作用。 -
不能调用函数模板;需要实例化,只有编译器能够推导出模板参数,才能自动实例化。而且你不能在不传递这些参数的情况下调用一个接受参数的函数,所以不清楚你为什么期望能够实现这一点。
标签: c++ function templates binding class-hierarchy