带有模板的类的构造函数
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<float>::UniformVar( ... )
吗?
@SamVarshavchik 谢谢,这行得通!你能把这个写成答案,这样我就可以结束这个问题了吗?
【参考方案1】:
在模板定义之外显式定义模板化构造函数(或任何类型的类方法)的正确方法通常是:
模板名称::方法(参数)
因此,在您的情况下,方法是模板的构造函数,它将是:
UniformVar<float>::UniformVar(Shader *shader, std::string varName)
【讨论】:
以上是关于带有模板的类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章