小编Ven*_*san的帖子

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

我想要类似于下面的功能:

typedef int A;
typedef int B;


struct foo
{
  foo(A a) { /*specific to type A*/ }
  foo(B b) { /*specific to type B*/ }
};
Run Code Online (Sandbox Code Playgroud)

我在程序中使用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) {}
};
Run Code Online (Sandbox Code Playgroud)

但不幸的是,发现太丢弃了我的typedef,只是在两种情况下都返回了A的迭代器.我还考虑过定义枚举并将其用于每种类型

enum { TYPE_A, TYPE_B };
template <int i> struct int2type {};
Run Code Online (Sandbox Code Playgroud)

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

如果有一种通用且可扩展的方法,请告诉我.

c++ visual-c++

7
推荐指数
1
解决办法
827
查看次数

在c ++中使用命名空间

我们可以使用下面代码段中的命名空间吗?代码在gcc和msvc中编译,让我对名称空间使用感到困惑.

在f1.h:

namespace My
{
 void foo();
}

在f1.cpp`中

void My::foo()
{
}

我认为该函数应该定义为:

namespace My {
void foo() {}
}

任何人都可以解释一下吗?

谢谢

c++ namespaces

2
推荐指数
1
解决办法
316
查看次数

标签 统计

c++ ×2

namespaces ×1

visual-c++ ×1