我想要类似于下面的功能:
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类型.但这看起来不优雅,因为它容易出错.我想使用一个类型列表并执行此操作,以便明确支持哪些类型.
如果有一种通用且可扩展的方法,请告诉我.
我们可以使用下面代码段中的命名空间吗?代码在gcc和msvc中编译,让我对名称空间使用感到困惑.
在f1.h:
namespace My
{
void foo();
}
在f1.cpp`中
void My::foo()
{
}
我认为该函数应该定义为:
namespace My {
void foo() {}
}
任何人都可以解释一下吗?
谢谢