Строка:
template <typename T>
T (*Test::getFirst)() = &A<T>::getA1; //Pointer to getA1, error
Имеет две проблемы: Первая состоит в том, что &A<T>::getA1
имеет тип T (A::*)()const
, но getFirst имеет тип T (*)()
.Они несовместимы, поскольку первый является указателем на функцию-член, а второй - нет.
Вторая проблема со строкой заключается в том, что созданные объекты будут отличаться только по типу возвращаемого значения.Точно так же, как вы не можете вручную объявить как double (A::*getFirst)()const
, так и char (A::*getFirst)()const
, вы также не можете создать шаблон, который бы автоматически объявил оба из них.
Строка:
double c = a.getFirst + b.getSecond;
Имеет свой собственный набор проблем, которые могут или не могут быть связаны с рассматриваемой проблемой.
Извините за этот "не ответ".возможно, если вы поговорили больше о том, что вы пытаетесь достичь, а не о том, как вы пытаетесь это сделать, мы сможем помочь.