在c ++中区分typedef到相同类型

时间:2010-06-27 22:09:22

标签: c++ visual-c++

我想要与以下类似的功能:

typedef int A;
typedef int B;


struct foo
{
  foo(A a) { /*specific to type A*/ }
  foo(B b) { /*specific to type B*/ }
};

我在程序中使用typedef来表示相同类型的逻辑上不同的用法。所以,我想为不同的typedef创建不同类型的foo对象。我可以用g ++编译它,但msvc抛出一个合适的说foo(A)已经定义了它看到第二个定义foo(B)。我想到使用类型列表和列表中的类型的位置来区分typedef并尝试使用boost :: mpl :: vector:

#include <boost/mpl/vector.hpp >
#include <boost/mpl/find.hpp>

typedef int A;
typedef int B;


struct foo
{
     typedef boost::mpl::vector<A, B> supported_types;

     foo(boost::mpl::find<supported_types, A>::type, A a) {}
     foo(boost::mpl::find<supported_types, B>::type, B b) {}
};

但不幸的是,find也丢弃了我的typedef,只是在两种情况下都返回了A的迭代器。我还想过定义枚举并将其用于每种类型

enum { TYPE_A, TYPE_B };
template <int i> struct int2type {};

并在程序中使用此int2type并键入B.但这看起来不优雅,因为它容易出错。我想使用一个类型列表并执行此操作,以便明确支持哪些类型。

如果有通用和可扩展的方法,请告诉我。

2 个答案:

答案 0 :(得分:9)

boost strong typedef应该做你想要的。

#include <boost/strong_typedef.hpp>

BOOST_STRONG_TYPEDEF(int, A);
BOOST_STRONG_TYPEDEF(int, B);

答案 1 :(得分:1)

尝试BOOST_STRONG_TYPEDEF或实施您自己的:http://www.drdobbs.com/184401633;jsessionid=PNA3RR4N0WKFNQE1GHRSKH4ATMY32JVN

相关问题