私は単純なクラスを持っておりA
、可変引数関数テンプレートを提供しています。この関数は 内のプライベート データを使用しますA
が、関数自体はパブリックです。クラスは次のようになります。
class A {
public:
A() :
_bla("bla: ") {
}
template <class T>
void bar(const T& value) {
std::cout << _bla << value << std::endl;
}
template <class H, class... T>
void bar(const H& value, const T&... data) {
std::cout << _bla << value << std::endl;
bar(data...);
}
private:
const std::string _bla;
};
foo.hppという名前の別のファイルには、引数としてfoo()
関数を受け取って使用できる関数があります。a.bar()
int main(int argc, char *argv[]) {
A a;
a.bar(1, "two", 3, 4);
foo(&a.bar);
}
どこから始めればよいかよくわかりませんが、次のことを試しましたが、うまくいきません。どうすれば正しくできますか:
template <typename... T>
inline void foo(void (bar *)(const T&...)) {
unsigned int x(0), y(0), z(0);
bar(x, y, z);
}
おまけの質問:だけでなく呼び出す方法はありますか:
foo(&a.bar);
foo
次のようないくつかのパラメーターにa.bar
バインドして呼び出すこともできます。
foo(&(a.bar(p1, p2));
次のように、定義自体にp1
andp2
を追加するだけです。foo
foo(p1, p2, &a.bar);
しかし、これらのパラメーターを前に追加できれば、私の目的にとって意味的には良いでしょう。