2010-05-17 32 views
1

是否可以使用成員函數指針與模板元編程?如:帶成員函數指針的模板元編程?

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; 

當然,這是相當人爲的,但它有可能嗎? (是的,也許有更好的方法,但幽默我。)

回答

2

上的指針到非靜態成員作爲模板參數的主題退房this discussion。它看起來像VC++實施有問題。

+0

啊哈! VC++實現的問題!去搞清楚。 – wheaties 2010-05-17 18:32:30

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; 
+0

你說得對。堅持下去,你擁有的就是我的代碼。我最初寫了'void Bar()',但是回溯到構造函數。 – wheaties 2010-05-17 18:33:09