我可以在 C++ 命名空间中创建类似int
和可用的内置类型吗?double
#include <complex>
typedef int my_int;
namespace my_namespace {
namespace std = ::std; // Works
using ::my_int; // Works
using ::int; // Fails: "expected unqualified-id before 'int'"
typedef ::int int; // Fails: "expected unqualified-id before 'int'"
}
typedef int out::int; // Fails: "expected unqualified-id before 'int'"
my_namespace::my_int x; // Works
my_namespace::std::complex<int> c; // Works
// I would like to use this:
my_namespace::int x2; // Fails: "expected unqualified-id before 'int'"
我怀疑这是由于语言限制禁止使用带有关键字的合格标识符(int
在这种情况下),但我希望有某种方式来公开这些。
用例
我正在尝试使用命名空间来组织类型,以便外部工具(SWIG)可以适当地用另一种语言包装函数。例如:
void one_two(int &x, int &y) { x = 1; y = 2; }
在目标语言中,这可以被包装为一个改变其参数one_two(x, y)
的函数,或者一个返回输出的函数x, y = one_two()
。我想要某种“注释”参数的方式,以便为SWIG提供预期用途。当前SWIG实现的最简洁的选项是使用命名空间来区分两种用途:因此x, y = one_two()
可以表示输出版本:
void one_two(out::int &x, out::int &y) { x = 1; y = 2; }
如果我能以某种方式out::int
为int
. (这种方法适用于用户定义的类型。)