3

引数の型を表すためにfooa を使用して単純化したいと思います。typedefptr

#include <iostream>

template <unsigned N>
int foo (int (*ptr) (const char (*)[N])) {
    char good[N] = "good";
    return ptr(&good);
}

int bar (const char (*x)[5]) {
    std::cout << *x << "\n";
    return 0;
}

int main ()
{
    return foo(bar);
}

私はこのようになるように書きたいと思いfoo()ます:

template <unsigned N>
int foo (FUNCTION_TYPE *ptr) {
    char good[N] = "good";
    return ptr(&good);
}

ヘルパー クラスのようなトレイトを使用しようとしましたが、失敗しました。forを作成する適切な方法はあり ますか?typedef FUNCTION_TYPE

4

4 に答える 4

3

usingC++11 では、キーワードを使用して、テンプレートの typedef にほぼ相当するものを取得できます。これはまだN引数から推測することができます:

template <unsigned N>
using fooP = int (*) (const char (*)[N]);

template <unsigned N>
int foo (fooP<N> ptr) {
  return ptr(0);
}

int bar(const char (*p)[2]) {
  return 0;
}

int main() {
  return foo(bar);
}
于 2013-06-10T22:14:26.270 に答える
1

実際にはテンプレートにするだけです

template<unsigned N, typename Func) 
int foo(Func func){ return func("good"); }

int bar(const std::string& str){ return str == "good"; }

int main(){    const int r = foo(bar); }

そうすれば、通常の関数を渡すだけでなく、ファンクターを渡すこともできます

于 2013-06-10T22:01:03.107 に答える