是否可以使用带有模板元编程的成员函数指针?如:
class Connection{
public:
string getName() const;
string getAlias() const;
//more stuff
};
typedef string (Connection::*Con_Func)() const;
template<Con_Func _Name>
class Foo{
Connection m_Connect;
public:
Foo(){
cout << (m_Connect.*_Name)();
}
};
typedef Foo<&Connection::getName> NamedFoo;
typedef Foo<&Connection::getAlias> AliasFoo;
当然,这是相当人为的,但有可能吗? (是的,可能有更好的方法,但幽默我。)
答案 0 :(得分:2)
如果你问,可以将指向成员的指针用作模板参数,然后是的。但是你的代码中有很多错误。我想,这就是你的意思:
// Necessary includes
#include <string>
#include <iostream>
#include <ostream>
class Connection{
public:
// Use std:: for standard string class
std::string getName() const;
std::string getAlias() const;
//more stuff
};
typedef std::string (Connection::*Con_Func)() const;
template<Con_Func _Name>
class Foo{
Connection m_Connect;
public:
// Constructors don't have return values
Foo(){
// Correct syntax for function call through pointer to member
std::cout << (m_Connect.*_Name)();
}
};
typedef Foo<&Connection::getName> NamedFoo;
typedef Foo<&Connection::getAlias> AliasFoo;
答案 1 :(得分:2)
将关于指向非静态成员的主题的this discussion作为模板参数进行检查。看起来VC ++实现存在问题。