【发布时间】:2018-06-28 15:20:02
【问题描述】:
我正在开发 c++11 应用程序:
我有一些模板化的方法:
template <class P, class T>
void copyMemberToDocument(const P &childClass
std::string (T::*getter) (void) const) {
auto member = (childClass.*getter)();
// ...
}
子类有多重继承,所以我可以有类似的东西:
class A {
public:
int getA() {return 1;}
class B {
public:
const char* getB() {return "hello";}
class C : public A, public B {};
所以我可以这样做:
C c;
copyMemberToDocument(c, &B::getB);
copyMemberToDocument(c, &A::getA);
是否有可能知道模板化方法中的返回值是“const char*”还是“int”,以便根据它做不同的事情?
【问题讨论】:
-
但该解决方案会让我为每种返回类型拥有一个专门的模板,对吧?
-
您的
copyMemberToDocument定义中似乎缺少逗号。您还将它限制为返回std::string的方法,因此不能使用&A::getA或&B::getB调用它 -
你真的尝试过代码吗?第二个模板参数是返回 std::string 的成员函数。你不能使用不同的返回类型,除非你把它模板化,然后你知道类型
标签: c++ c++11 templates return-type-deduction