19

当我编写 C++ 代码时,我尝试使用 ausing <X>来避免过多的污染。在 Crypto++ 中,它在一种情况下给我带来了问题。案例是 CryptoPP 命名空间中的 ASN1 命名空间(它只出现在一个地方)。

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

例如,我可以使用以下secp256r1曲线:

CryptoPP::ASN1::secp256r1();

但是,我还没有想出一种使用 using 来声明它的方法。当我尝试:

#include <cryptopp/asn.h>
#include <cryptopp/oids.h>
using CryptoPP::ASN1;

它最终导致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());

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


$ g++ -version
i686-apple-darwin11-llvm-g++-4.2
4

4 回答 4

26

说啊:

using namespace CryptoPP::ASN1;
于 2012-12-22T02:36:17.157 回答
14

其他答案推荐using namespace CryptoPP::ASN1;,但这不是您想要的(大概),因为它将命名空间的所有内容ASN1导入您的范围。

我的猜测是你想这样做:

namespace ASN1 = CryptoPP::ASN1;

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

于 2018-02-15T15:53:31.623 回答
4

尝试

using CryptoPP::ASN1::secp256r1;

secp256r...然后无条件地调用。这避免了使用命名空间,有些人对此并不满意。

于 2012-12-22T02:48:32.120 回答
4

ASN1 是一个命名空间。尝试:

using namespace CryptoPP::ASN1;
于 2012-12-22T02:38:57.740 回答