问一个vs2005中C++模板元关于类型匹配的问题
主要是想对类型进行识别,然后对他们调用不同的函数,代码如下:template<int ty> struct TY{ enum {ty_ = ty;};
#define VECTOR 1
#define MAP 2
template<int i> struct Dosome;
template<> struct Dosome<VECTOR>
{
template<typename T>
staticvoid do(std::vector<T> & v){
//......
}
};
template<> struct Dosome<MAP>
{
template<typename T1, typename T2>
static void do(std::map<T1, T2>& m)
{
//....
}
};
struct VectorSpim
{
template<typename T> VectorSpim(std::vector<T> &t);
};
struct MapSpim
{
template <typename T1, typename T2> MapSpim(std::map<T1, T2>& t);
};
TY<VECTOR> Fun(bool,VectorSpim);
TY<MAP> Fun(bool, MapSpim)
template<typename T>
Type_trls
{
T& null_opt();
enum{_ret = Fun(null_opt()).ty_;} //(1) 在Vs2005中说这里要一个常量,但是在vc6中没有问题。};
template <typename T>
void Do(T& t)
{
Dosome<Type_trals<T>::_ret>::do(t);
}
我查看了专门介绍模板元编程的书上也说(1)这样进行类型识别是没有问题,为什么我在vc6中可以用到vc2005中却不行呢?千万不要说是vc6对标准的支持比vc2005的还要好啊~~~!!! 兄弟,还是别折腾这些鸟东西吧。。。 搞定了
问一个vs2005中C++模板元关于类型匹配的问题
主要是想对类型进行识别,然后对他们调用不同的函数,代码如下:
template<int ty> struct TY{ int bb;}; // 1,设置数组大小
#define VECTOR 1
#define MAP 2
template<int i> struct Dosome;
template<> struct Dosome<VECTOR>
{
template<typename T>
staticvoid do(std::vector<T> & v){
//......
}
};
template<> struct Dosome<MAP>
{
template<typename T1, typename T2>
static void do(std::map<T1, T2>& m)
{
//....
}
};
struct VectorSpim
{
template<typename T> VectorSpim(std::vector<T> &t);
};
struct MapSpim
{
template <typename T1, typename T2> MapSpim(std::map<T1, T2>& t);
};
TY<VECTOR> Fun(bool,VectorSpim);
TY<MAP> Fun(bool, MapSpim)
template<typename T>
Type_trls
{
T& null_opt();
enum{_ret = (sizeof(Fun(null_opt())) / sizeof(int));} //2
};
template <typename T>
void Do(T& t)
{
Dosome<Type_trals<T>::_ret>::do(t);
}
修改了上面1,2两处后就可以了,具体是由于我对标准没摸清楚还是vs2005对这个地方不支持还有待考证。 其实是VC6对标准的支持不完全,VC2005则完全支持C++98标准,但是VC2005对于一些类型以及错误的要求比VC6严格,可能才导致了你的问题。 这种东西没什么研究价值, 浪费时间, 除非你要整一个什么牛x级的c++库... 支持楼主学习精神,但绝不向楼主学习。
页:
[1]