組み込み型を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実装で最もクリーンなオプションは、名前空間を使用して 2 つの用途を区別することです: したがって、出力バージョンは次のx, y = one_two()
ように表すことができます::
void one_two(out::int &x, out::int &y) { x = 1; y = 2; }
out::int
どういうわけか同義語を作ることができればint
。(このアプローチは、ユーザー定義型でうまく機能します。)