c++ - 使用模板在类中声明新函数
问题描述
我还在学习模板。我不确定您是否可以使用模板在类(方法)中声明/(自动定义)一个函数。也就是说,我有一个这样定义的函数模板,例如:
template<typename T>
T getT() {
T result;
return result;
}
还有一个类,我希望根据模板创建“新功能”,如下所示:
class World{
public:
World();
~World();
getT<int>; //"Magically" create new function from the template (return type 'int')
}
我真正想要的是在 World 中只有一个具有特定给定类型的方法。这意味着当我想“神奇地”创建一个基于模板的方法时,我想将模板函数复制粘贴到类中,但具有给定的类型。
例如:
class World{
public:
World();
~World();
//The magically created function with T equal to int
int getT(){
int result;
return result;
}
}
然后我当然希望能够调用该函数:
int main(){
World world; //Create world object
world.getT<int>; //Call the function
return 0;
}
即使在这里我说我会用 来调用它getT<int>
,它也可能只是getT()
(如果它是模板函数的完美复制粘贴)。
解决方案
getT<int>; //"Magically" create new function from the template (return type 'int')
我认为这行不通。
似乎您希望能够使用宏扩展等模板。不幸的是,它们是非常不同的东西,模板不像宏扩展那样工作。
但是,您可以使用以下内容:
template<typename T>
struct GetHelper
{
T get()
{
return T{};
}
};
class World : private GetHelper<int>,
private GetHelper<double>
{
public:
World() {}
~World() {}
template <typename T>
get()
{
return static_cast<GetHelper<T>*>(this)->get();
}
};
现在您可以使用:
World w;
int a = w.get<int>();
double b = w.get<double>();
您也可以隐藏GetHelper
为以下private
类型World
:
class World
{
private:
template<typename T>
struct GetHelper
{
T get()
{
return T{};
}
};
struct Data : GetHelper<int>,
GetHelper<double>{};
Data data;
public:
World() {}
~World() {}
template <typename T>
get()
{
return static_cast<GetHelper<T>*>(&data)->get();
}
};
推荐阅读
- python - AttributeError:模块'numbers'在scripy中没有属性'Integral'
- parsing - 如何在antlr4中使用Listener方法获取解析器的内容?
- python - py2exe 不工作 - 闪烁控制台并关闭
- python - 带有旋转/缩放/剪切/平移提取的 3D 点云配准(知道对应关系)
- javascript - 如何使用双向数据绑定将一个文本替换为另一个文本?
- python - 为什么我的 val_loss 下降但我的 val_accuracy 停滞不前
- ruby-on-rails - 在 kubernetes 中运行 rails + postgres:连接被拒绝
- flutter - 如何在 Firestore 查询中使用 DocumentReference
- c# - 获取程序要连接的 IP 地址
- .net - 如何在 docker 中安装 .net 框架?