带有模板的类的构造函数

Posted

技术标签:

【中文标题】带有模板的类的构造函数【英文标题】:Constructor of classes with templates 【发布时间】:2019-12-28 13:48:04 【问题描述】:

我正在尝试为 OpenGL 统一变量创建一个类,我想为这个类使用模板。

看起来像这样:

template <typename T>
class UniformVar 
public:
    UniformVar() = delete;
;

该类仅可用于某些类型名,例如 floats

所以浮点数的声明如下所示:

template<>
class UniformVar<float> 
public:
    UniformVar(Shader *shader, std::string varName);

    float getVar();
    void setVar(float var);

private:
    Shader *shader;
    std::string varName;
;

现在的问题是我不知道如何在cpp文件中定义构造函数。它看起来像这样:

template<>
UniformVar::UniformVar(Shader *shader, std::string varName) 



float UniformVar::getVar() 



void UniformVar::setVar(float var) 


在此代码的第二行中,我收到编译器错误'UniformVar' is not a class, namespace, or enumeration

我试图做这样的事情:

UniformVar::UniformVar<float>(Shader *shader, std::string varName) 

但它不起作用。

【问题讨论】:

你试过UniformVar&lt;float&gt;::UniformVar( ... )吗? @SamVarshavchik 谢谢,这行得通!你能把这个写成答案,这样我就可以结束这个问题了吗? 【参考方案1】:

在模板定义之外显式定义模板化构造函数(或任何类型的类方法)的正确方法通常是:

模板名称::方法(参数)

因此,在您的情况下,方法是模板的构造函数,它将是:

UniformVar<float>::UniformVar(Shader *shader, std::string varName)

【讨论】:

以上是关于带有模板的类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 std::void_t 的类模板检查默认构造函数

指向具有私有构造函数的类的类成员的指针

非模板类的模板构造函数出现问题[重复]

内部类的公共构造函数是啥意思[重复]

C++ 为类模板提供初始化列表构造函数

将派生类的构造函数声明为父类的友元