[讨论]关于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;
}

首先,在不调用的情况下编译时没有问题的

[讨论]关于c++的template的一个问题

然后,把注释取消,就变成

[讨论]关于c++的template的一个问题

猜测,在编译时template相当于一个内联函数(就是类型什么的在编译时就是确定的,这时候再用别的类型去赋值,肯定报错,就像int 不能直接赋值string一样)

欢迎各位高手在评论区留言,怎么解决这个问题,谢谢!