【问题标题】: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 谢谢,这行得通!你能把这个写成答案,这样我就可以结束这个问题了吗?

标签: c++ class templates


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2013-08-26
    相关资源
    最近更新 更多