使用嵌套命名空间声明"使用命名空间"时出错("在声明中不允许使用命名空间xxx :: yyy")

jww*_*jww 10 c++ namespaces

当我编写C++代码时,我尝试使用a using <X>来防止污染太多.在Crypto ++中,它在一个案例中给我提问.案例是CryptoPP命名空间中的ASN1名称空间(它只显示在一个地方).

这是Crypto ++中的声明:http://www.cryptopp.com/docs/ref/oids_8h_source.html.

我可以使用例如secp256r1曲线:

CryptoPP::ASN1::secp256r1();
Run Code Online (Sandbox Code Playgroud)

但是,我还没有找到一种方法来使用它来声明它.当我尝试:

#include <cryptopp/asn.h>
#include <cryptopp/oids.h>
using CryptoPP::ASN1;
Run Code Online (Sandbox Code Playgroud)

它最终导致error: namespace ‘CryptoPP::ASN1’ not allowed in using-declaration,然后error: ‘ASN1’ has not been declared在下面(我尝试了两者):

ECIES<ECP>::Decryptor d1(prng, secp256r1());
ECIES<ECP>::Decryptor d2(prng, ASN1::secp256r1());
Run Code Online (Sandbox Code Playgroud)

using当有多个命名空间时,如何使用语句?


$ g++ -version
i686-apple-darwin11-llvm-g++-4.2
Run Code Online (Sandbox Code Playgroud)

Cha*_*via 17

说啊:

using namespace CryptoPP::ASN1;
Run Code Online (Sandbox Code Playgroud)

  • 直接调用`secp256r1()`而不使用名称空间限定符 (3认同)

kra*_*lyk 6

建议其他答案,using namespace CryptoPP::ASN1;但这不是您想要的(大概),因为它将名称空间的所有内容ASN1导入您的作用域。

我的猜测是您想这样做:

namespace ASN1 = CryptoPP::ASN1;
Run Code Online (Sandbox Code Playgroud)

这将允许您ASN1::secp256r1()在您的范围内使用例如。