1
#include <iostream>
struct A
{
bool f(int a) { std::cout << "int" << std::endl; return true;};
bool f(int a, int b) { std::cout << "two int" << std::endl; return true;};
bool f(float a) {std::cout << "float" << std::endl; return true;};
bool f(float a, float b) {std::cout << "two float" << std::endl; return true;};
};
template <typename T>
struct Type
{
typedef bool (A::*One)(T);
typedef bool (A::*Two)(T, T);
};
template <typename T, typename Type<T>::One F >
void run(A & a)
{
T tmp = 0;
(a.*F)(tmp);
}
int main(int argc, char ** argv)
{
A a;
run<int, &A::f>(a);
run<float, &A::f>(a);
return 0;
}
問題はtypename Type<T>::One F
の構文にあります。 Type
からtypedefを使用する代わりに実際のメソッドポインタを指定すると、正常に動作します(hereとhereを参照)。 Type
のtypedefをテンプレート引数として使用する方法はありますか?他のテンプレートクラスの内部typedefによって定義された型のテンプレート引数
あなたの例はわかりました。どのようなエラーが表示されますか、どのコンパイラを使用していますか? –
+1完全なコンパイル可能な例と明確な質問を投稿してください。あなたのコードはコンパイルされ、私のために働いた。 –
Ideoneの[here](http://ideone.com/SBJpR)、IBMコンパイラでコンパイルしたときに、 '非型のテンプレートパラメータに" bool(float、float) "という形式を持つことはできません。 CCコンパイラ。 – elmo