У меня есть общий указатель на функцию шаблона, принимающий аргумент типа V
и возвращающий тип U
(два шаблона). Я пытаюсь инициализировать его, используя функцию, принимающую аргумент типа V
и возвращающую int
(один шаблон), но я получаю ошибку "разные уровни косвенности" (компилятор MSVC).
Воткод:
template<typename U, typename V>
class A {
public:
typedef U(*functype)(V);
const static functype f; //takes type V to U
};
template<typename V>
int myfunction(V x) {
return static_cast<int>(x+1); //takes type V to int
}
template<typename V>
const typename A<int,V>::functype A<int, V>::f=&myfunction<V>; //causes error
int main() {
auto t= A<int,long>::f(1); //this should return 2.
return 0;
}
Я не уверен, что не так в назначении. typename A<int,V>::functype
должно быть int(*)(V)
с шаблоном V
, и я назначаю другую функцию с шаблоном V
. Я по-прежнему получаю сообщение об ошибке, даже если вместо этого я пишу =&myfunction
в коде выше.