私は以下の問題があります。私は次のコードタイプ控除が機能しません
template< typename T >
T func(T t)
{
return t;
}
template< size_t N, typename T >
void foo(std::function< T(T) > func)
{
// ...
}
int main()
{
foo<3>(func<float>);
return 0;
}
をコンパイルしようとすると、私はエラーを取得する:
no matching function for call to 'foo'
foo<3>(func<float>);
^~~~~~
/Users/arirasch/WWU/dev/xcode/tests/tests/main.cpp:18:10: note: candidate template ignored: could not match 'function<type-parameter-0-1 (type-parameter-0-1)>' against 'float (*)(float)'
void foo(std::function< T(T) > func)
しかし、私は
template< typename T >
T func(T t)
{
return t;
}
template< size_t N, typename T >
void foo(std::function< T(T) > func)
{
// ...
}
int main()
{
std::function< float(float) > input_func = func<float>;
foo<3>(input_func);
return 0;
}
つまり、私はの入力関数を宣言するときに、それを修正するときfoo
を明示的にstd::function< float(float) >
と指定すると、正常にコンパイルできます。
誰もが私は単に代わりinput_func
の種類を明示的に指定する必要があります
std::function< float(float) > input_func = func<float>;
foo<3>(input_func);
の(私の最初のコード例に係る)foo<3>(func<float>);
ような何かを書くことができるように、私が代わりに私のコードをFIXEことを知っていますか?
事前に感謝します。
機能を 'のstd :: function'sではありません。 –