[英]Template class function pointer type alias
我正在嘗試為myClass內的函數(myFunction)創建類型別名。
template<typename T>
using calc_t = matrix<T> (MyClass<T>::*myFunction)(const matrix<T> &X);
在哪里我會得到通用語法錯誤, missing ')' before MyClass<T>::*myFunction
。
然后照原樣使用
calc_t<double> fptr = &MyClass<double>::myFunction;
我不知道在語法在這一特定的情況下,使用使用時using
類型別名,而不是一個非模板的typedef。
我看了以下其他SO問題,這些問題似乎並未涵蓋此特定用法:
我嘗試了其他一些變體,但沒有成功。
看來問題在於您也在嘗試在右側命名函數指針。 以下為我編譯:
template <typename T>
class Matrix { };
template <typename T>
class MyClass
{
public:
Matrix<T> myFunc() { return {}; }
};
template <typename T>
using my_f = Matrix<T> (MyClass<T>::*)(); // NOTE: No myFunction here
int main() {
my_f<double> f = &MyClass<double>::myFunc;
return 0;
}
作為替代,正如我在評論已經建議,你可以使用std::function
,因為它會更容易使用和更通用。
template <typename T>
class matrix { };
template <typename T>
class MyClass
{
public:
matrix<T> myFunction(matrix<T> const&) { return {}; }
};
template<typename T>
using calc_t = std::function<matrix<T>(matrix<T> const&)>;
int main()
{
MyClass<double> myObject;
using namespace std::placeholders; // For e.g. _1
calc_t<double> myFunction = std::bind(&MyClass<double>::myFunction, myObject, _1);
matrix<double> myFirstMatrix, mySecondMatrix;
myFirstMatrix = myFunction(mySecondMatrix);
}
如上所示,您可以使用std::bind
。 但是您也可以使用lambda表達式 :
calc_t<double> myFunction = [&](matrix<double> const& m)
{
return myObject.myFunction(m);
};
或者更好(無論如何對於這個簡單的用例)使用類型推導
auto myFunction = [&](matrix<double> const& m)
{
return myObject.myFunction(m);
};
使用lambda,類型推導和模板,您可以以簡單的方式創建非常通用,富有表現力的復雜代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.