[英]C++: Using templated typedef in two classes
嗨,我有以下課程:
template<class T>
class RandomTree<T> {
private:
RandomTreeNode root;
typedef double (*funcion_ptr) (T, T);
public:
RandomTree(std::vector<function_ptr> functions){...}
};
template<class T>
class RandomTreeNode<T> {
private:
typedef double (*funcion_ptr) (T, T);
function_ptr function;
public:
RandomTreeNode(function_ptr function){...}
};
樹被賦予一個函數指針向量,每個節點都被創建並具有一個特定的函數。 有沒有辦法讓我不必在兩個類中定義typedef double (*function_ptr) (T,T)
?
當您聲明一個獨立的函數指針類型而不是成員函數指針時,您當然可以將typedef放在全局作用域或命名空間中的單獨模板化類中,因此可以由兩個類訪問它。
像這樣:
template<class T>
struct RandomTreeFunction
{
typedef double (*function_ptr)(T, T);
};
template<class T>
class RandomTree<T> {
private:
typedef typename RandomTreeFunction<T>::function_ptr function_ptr;
...
};
我還建議你研究一下使用std::function
。
如果你在RandomTreeNode<T>
公開它,你可以說:
template<class T>
class RandomTree<T> {
typedef RandomTreeNode<T>::funcion_ptr function_ptr;
};
或直接使用RandomTreeNode<T>::funcion_ptr
,這將非常繁瑣。
如果您對包含模板別名的編譯器(例如gcc> = 4.7,clang> = 3.0)有所了解,您可以執行類似的操作
#include <vector>
template<class T>
using function_ptr = double (*)(T,T);
template<class T>
class RandomTreeNode {
private:
function_ptr<T> function;
public:
RandomTreeNode(function_ptr<T> function){/*...*/}
};
template<class T>
class RandomTree {
private:
RandomTreeNode<T> root;
public:
RandomTree(std::vector<function_ptr<T>> functions){/*...*/}
};
否則,Joachim Pileborg的解決方案就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.