yoogera 发表于 2010-6-21 20:49:01

问一个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的还要好啊~~~!!!

winston 发表于 2010-6-21 22:39:08

兄弟,还是别折腾这些鸟东西吧。。。

yoogera 发表于 2010-6-22 21:15:59

搞定了

问一个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对这个地方不支持还有待考证。

earthdog 发表于 2010-7-13 21:54:24

其实是VC6对标准的支持不完全,VC2005则完全支持C++98标准,但是VC2005对于一些类型以及错误的要求比VC6严格,可能才导致了你的问题。

Jack 发表于 2010-8-6 19:08:40

这种东西没什么研究价值, 浪费时间, 除非你要整一个什么牛x级的c++库...

sevencat 发表于 2010-8-8 20:48:24

支持楼主学习精神,但绝不向楼主学习。
页: [1]
查看完整版本: 问一个vs2005中C++模板元关于类型匹配的问题