簡體   English   中英

C ++:在兩個類中使用模板化的typedef

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM