找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6154|回复: 5

问一个vs2005中C++模板元关于类型匹配的问题

[复制链接]
发表于 2010-6-21 20:49:01 | 显示全部楼层 |阅读模式
主要是想对类型进行识别,然后对他们调用不同的函数,代码如下:

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>
   static  void 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的还要好啊~~~!!!
发表于 2010-6-21 22:39:08 | 显示全部楼层
兄弟,还是别折腾这些鸟东西吧。。。
 楼主| 发表于 2010-6-22 21:15:59 | 显示全部楼层
搞定了

问一个vs2005中C++模板元关于类型匹配的问题


主要是想对类型进行识别,然后对他们调用不同的函数,代码如下:

template<int ty> struct TY{ int bb[ty];}; // 1,设置数组大小

#define VECTOR 1
#define MAP 2

template<int i> struct Dosome;

template<> struct Dosome<VECTOR>
{
   template<typename T>
   static  void 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对这个地方不支持还有待考证。
发表于 2010-7-13 21:54:24 | 显示全部楼层
其实是VC6对标准的支持不完全,VC2005则完全支持C++98标准,但是VC2005对于一些类型以及错误的要求比VC6严格,可能才导致了你的问题。
发表于 2010-8-6 19:08:40 | 显示全部楼层
这种东西没什么研究价值, 浪费时间, 除非你要整一个什么牛x级的c++库...
发表于 2010-8-8 20:48:24 | 显示全部楼层
支持楼主学习精神,但绝不向楼主学习。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-21 19:08 , Processed in 0.016563 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表