[讨论]关于c++的template的一个问题
最近做项目的时候,钻进了一个牛角尖,百思不得其解,希望有高手指定一二
BUG背景:假设有很多很多结构相似的结构体,它们的唯一区别就是枚举的名称和枚举的命名方式不相同,现在我想设计一个统一的算法读取,这些结构体(PS:无论结构体的名称是什么,都能用同一个函数读取出来)
下面给出示例代码
#include "stdafx.h"
#include <string>
using namespace std;
//假设有很多个结构体,每个结构体唯一的不同就是enum的命名
//首先定义两个枚举类型
enum MyEnum
{
t1=0,
t2,
t3
};
enum YourEnum
{
d1=0,
d2,
d3
};
//然后是两个结构体
struct MyStruct
{
MyEnum my;
};
struct YourStruct
{
YourEnum your;
};
//然后定义一个template
template < class T > bool GetEnum(string name,T &en)
{
int i = 1;//假设这个i可以通过配置文件修改
if (name=="My")
{
en.my = MyEnum(i);
}else if (name=="your")
{
en.your = YourEnum(i);
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
YourStruct you;
MyStruct mine;
//GetEnum<MyStruct>("My", mine);
return 0;
}
首先,在不调用的情况下编译时没有问题的
然后,把注释取消,就变成
猜测,在编译时template相当于一个内联函数(就是类型什么的在编译时就是确定的,这时候再用别的类型去赋值,肯定报错,就像int 不能直接赋值string一样)
欢迎各位高手在评论区留言,怎么解决这个问题,谢谢!