Различение между определениями типов к тому же типу в C++

Я хочу функциональность, подобную ниже:

typedef int A;
typedef int B;


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

Я использую определения типов в своей программе для обозначения логически другого использования того же типа. Так, я хотел бы создать объект нечто типа по-другому для различных определений типов. Я мог скомпилировать это в g ++, но msvc закатывает истерику, говоря, что нечто (A) уже определяется, когда это видит второе нечто определения (B). Я думал об использовании списка типов и положения типа в списке для различения между определениями типов и пытался использовать повышение:: mpl:: вектор:

#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) {}
};

но к сожалению, найдите также отбрасывания моим определением типа, и просто возвращает итератор для в обоих случаях. Я также думал об определении перечисления и использовании его для каждого типа

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

и использование этого int2type и типа B в программе. Но это выглядит неэлегантным мне, поскольку это подвержено ошибкам. Я хотел бы, используют список типов и делают это, так, чтобы было ясно, какие типы поддерживались бы.

Сообщите мне, существует ли универсальный и расширяемый способ сделать это.

7
задан Venkatesan 27 June 2010 в 22:17
поделиться

2 ответа

А boost strong typedef должен сделать то, что вы ищете.

#include <boost/strong_typedef.hpp>

BOOST_STRONG_TYPEDEF(int, A);
BOOST_STRONG_TYPEDEF(int, B);
9
ответ дан 7 December 2019 в 01:15
поделиться

Попробуйте BOOST_STRONG_TYPEDEF или реализуйте свой собственный: http://www.drdobbs.com/184401633;jsessionid=PNA3RR4N0WKFNQE1GHRSKH4ATMY32JVN

1
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: