다음과 같은 문제가 있습니다. 나는 다음과 같은 코드를 컴파일 할 때유형 공제가 작동하지 않습니다.
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;
}
나는 오류 얻을 : 나는
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;
}
에 고정 할 때, 그러나
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)
을 즉, 나는의 입력 기능을 선언 할 때 foo
을 std::function< float(float) >
으로 명시 적으로 지정하면 컴파일이 성공적으로 완료 될 수 있습니다.
사람은 (내 첫 번째 코드 예제에 따라) 대신
std::function< float(float) > input_func = func<float>;
foo<3>(input_func);
의 input_func
의 종류가 명시 적으로 어디를 명기해야한다 단순히 foo<3>(func<float>);
같은 것을 쓸 수 있도록 내가 대안으로 내 코드를 관념 할 수있는 방법을 알고 있나요?
미리 감사드립니다.
기능은'표준 : function's 수 없습니다. –