c++ - 将用户定义的类作为模板参数传递

标签 c++

我正在尝试用 C++ 实现 Graph。
我定义了一个类 Edge以节点名称和权重作为 2 个参数。
还有一类Graph ,当我试图在 Graph 声明中将 Edge 作为模板参数传递时 Graph<int,Edge> g ,我得到一个错误。
我不能将类作为模板参数传递吗?我是 C++ 编码的新手,所以请原谅我的愚蠢行为。任何人都可以建议正确的方法吗?

template<class T1,class T2>
    class Edge{
        T1 d_vertex;
        T2 d_weight;
        public:
        Edge(T1,T2);
        T1 vertex();
        T2 weight();
};
template<class T1,class T2>
Edge<T1,T2>::Edge(T1 v,T2 w):d_vertex(v),d_weight(w){
}
template<class T1,class T2>
T1 Edge<T1,T2>:: vertex(){
        return d_vertex;
}
template<class T1,class T2>
T2 Edge<T1,T2>::weight(){
        return d_weight;
}
template<class T,class T2>
class Graph{
        vector<pair<T, list<T2> > > node;

};

int main()
{
    Graph<int,Edge> g;
}

最佳答案

在这个实例化中

Graph<int,Edge> g;

Edge 仍然是一个类模板。这意味着您的 Graph 类应该是这样的

template<class T, template<class,class> class T2>
class Graph{ /**/ };

即具有模板模板参数您应该指定Edge的类型,例如

Graph<int, Edge<int,int>> g;

关于c++ - 将用户定义的类作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24423953/

相关文章:

c++ - 我可以在派生类中继承私有(private)成员吗?

c++ - 尾随空格是什么意思,它与空白有什么区别?

c++ - 带指针的复制构造函数用法

C++:从 *std::shared_ptr 复制时出错

c++ - 映射运算符 [] 的编译错误

c++ - 为什么将 const 对象传递给需要非常量模板类型参数的模板化函数会导致编译错误?

c++ - 目标平台无法创建共享库

c++ - 如何从 TCP 连接获取正确的 MAC 地址?

c++ - 文件格式无法识别;视为链接描述文件。文本文件错误?

c++ - VkDescriptorBufferInfo 'range' 字段是否需要是 VkPhysicalDeviceProperties 'limits.minUniformBufferOffsetAlignment' 字段的倍数?