相关疑难解决方法(0)

C++命名空间建议

我只是在教自己C++命名空间(来自C#背景),我真的开始认为,即使C++比大多数其他语言做得更好,嵌套命名空间也不是其中之一!

我是否正确地认为,为了声明一些嵌套的命名空间,我必须执行以下操作:

namespace tier1
{
    namespace tier2
    {
        namespace tier3
        {
            /* then start your normal code nesting */
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

相反:

namespace tier1::tier2::tier3
{
}
Run Code Online (Sandbox Code Playgroud)

àlaC#?

当我需要转发声明时,这变得更加疯狂:

namespace tier1
{
    namespace tier2
    {
        namespace forward_declared_namespace
        {
            myType myVar; // forward declare
        }
        namespace tier3
        {
            /* then start your normal code nesting */
            class myClass
            {
                forward_declared_namespace::myType myMember;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,我开发的典型系统包括:

MyCompany::MySolution::MyProject::System::[PossibleSections]::Type
Run Code Online (Sandbox Code Playgroud)

这就是为什么你不倾向于在C++示例中看到很多名称空间的使用?或者通常只有单个(非嵌套)命名空间?

UPDATE

对于任何有兴趣的人,这就是我最终解决这个问题的方法.

c++ namespaces

72
推荐指数
5
解决办法
4万
查看次数

C++命名空间,与Java包的比较

我最近做了一堆Java编码,已经习惯了非常具体的包命名系统,例如深度嵌套com.company.project.db.这在Java,AS3/Flex和C#中工作正常.我也看到了在C++中应用的相同范例,但我也听说将C++命名空间视为Java包的直接对应物是不好的.

这是真的,为什么?命名空间/包如何相似和不同?如果使用深层嵌套命名空间,可能会出现哪些问题?

c++ java namespaces packages

44
推荐指数
3
解决办法
3万
查看次数

包含 boost/Optional.hpp 时发生 C2143 语法错误

我遇到了一个我无法理解的编译时错误。我尝试在我的代码中使用boost::optional,一旦包含,boost/optional.hpp我就无法再构建我的项目。如果我注释掉这个 include 语句,它就会起作用。我什至在我的代码中还没有任何实际用法boost::optional,只是类标头中的 include 语句(请参阅下面的完整标头)。编译器错误C2143 syntax error: missing ',' before '<'发生在另一个 Boost 标头中boost/utility/compare_pointees.hpp(请参阅下面的 GitHub 链接)。我还成功地使用了 Boost 中的其他东西,就像boost::filesystem::path在同一个项目中一样,所以我的 Boost 发行版应该没有问题。

这是我的环境:Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3boost 1.62.0。我还使用第三方库C++ REST SDK,其他都是 C++ 标准库的东西。

我的标题看起来像这样。我想添加一个新方法作为boost::optional<size_t>返回类型。

#pragma once

#include <boost/optional.hpp>   // <==== ERROR

// C++ REST SDK
#define _TURN_OFF_PLATFORM_STRING
#include <cpprest/http_listener.h>
#include <cpprest/http_msg.h>

namespace SANDBOX::REST
{
   class HttpGetHandler
   {
   public:
       virtual void …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-optional visual-studio-2015 option-type

3
推荐指数
1
解决办法
3586
查看次数