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;

確かに、これはかなり不自然ですが、可能ですか? (はい、おそらくもっと良い方法がありますが、私を笑わせてください。)

4

2 に答える 2

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;
于 2010-05-17T18:26:52.433 に答える
2

テンプレート パラメーターとしての非静的メンバーへのポインターに関するこのディスカッションを確認してください。VC++ の実装に問題があるようです。

于 2010-05-17T18:31:15.923 に答える