在C+中使用内置类型(double、int等)+;名称空间? 我能在C++命名空间中生成像 int >代码>和双之类的内置类型吗? #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'"

在C+中使用内置类型(double、int等)+;名称空间? 我能在C++命名空间中生成像 int >代码>和双之类的内置类型吗? #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'",c++,namespaces,typedef,swig,built-in,C++,Namespaces,Typedef,Swig,Built In,在目标语言中,可以将其包装为一个函数,该函数变异其参数one_-two(x,y),或者一个函数返回输出x,y=one_-two()。我想用某种方式“注释”参数,以提供预期用途。当前实现中最干净的选项是使用名称空间来区分这两种用途:因此输出版本x,y=one_two()可以表示为: void one_two(out::int &x, out::int &y) { x = 1; y = 2; } 如果我能让out::int成为int的同义词。(这种方法适用于用户定义的类型。)int

在目标语言中,可以将其包装为一个函数,该函数变异其参数
one_-two(x,y)
,或者一个函数返回输出
x,y=one_-two()
。我想用某种方式“注释”参数,以提供预期用途。当前实现中最干净的选项是使用名称空间来区分这两种用途:因此输出版本
x,y=one_two()
可以表示为:

void one_two(out::int &x, out::int &y) { x = 1; y = 2; }

如果我能让
out::int
成为
int
的同义词。(这种方法适用于用户定义的类型。)

int
和friends是该语言中的关键字。它们不是全局命名空间中的名称;就语言而言,它们根本不是名字。使用
限定它们是一个错误。尝试命名任何变量
int
也是一个错误。具体请参见C++03中的2.1第1段和C++11中的2.12第1段(文本相同):

表3中所示的标识符保留用作关键字(即
在第7阶段中被无条件视为关键字):
[ ... ]
int

int
和朋友是语言中的关键词。它们不是全局命名空间中的名称;就语言而言,它们根本不是名字。使用
限定它们是一个错误。尝试命名任何变量
int
也是一个错误。具体请参见C++03中的2.1第1段和C++11中的2.12第1段(文本相同):

表3中所示的标识符保留用作关键字(即
在第7阶段中被无条件视为关键字):
[ ... ]
int

您使用SWIG的目标语言是什么?许多目标语言使在接口中插入这种“强类型定义”变得很容易。@flex:Python,但我看不出这有什么帮助。目标是可以自动包装的C++代码。我需要提供SWIG的线索-因此要么修改名称(
OUTPUT
而不是
x
,因为kwargs不是不需要的),要么使用typedef。
out
名称空间是干净的,但是如果它也适用于内置类型,那就更好了,我认为这是不可能的。看,你用SWIG的目标语言是什么?许多目标语言使在接口中插入这种“强类型定义”变得很容易。@flex:Python,但我看不出这有什么帮助。目标是可以自动包装的C++代码。我需要提供SWIG的线索-因此要么修改名称(
OUTPUT
而不是
x
,因为kwargs不是不需要的),要么使用typedef。
out
名称空间是干净的,但是如果它也适用于内置类型,那就更好了,我认为这是不可能的。看见
void one_two(out::int &x, out::int &y) { x = 1; y = 2; }