fptr
объявлено const
, поэтому определите его также const
.Кроме того, поскольку Sort
является шаблоном, вам нужно typename
, чтобы сослаться на MyClass<T>::fptr
.
template<typename T>
const typename MyClass<T>::fptr MyClass<T>::arr[] = { &foo, &bar, &baz };
Примечание: вы не сможете поместить это определение или определения вашего статическогофункции в исходном файле, поскольку они являются шаблонами.
Демо
Кроме того, рассмотрите возможность использования using
вместо typedef
и std::array
вместо необработанногомассив:
using fptr = void (*)(std::vector<T>);
static const std::array<fptr, 3> arr;
// [...]
template<typename T>
const std::array<typename MyClass<T>::fptr, 3> MyClass<T>::arr = { &foo, &bar, &baz };
Демо
Есть ли лучший способ сделать это?
Возможно, но я могуне говорите без подробностей о том, что именно вы хотите сделать.