C++ 如何将TypeDef(使用声明)和常量分组到一组类中,并在内部使用它们?
我试图找到一种方法,将我的项目使用的主要类型和常量分组到一个名称空间中,然后我想用“使用名称空间”将它们导入我的所有类中。我不明白为什么这段代码不能编译,g++错误说:C++ 如何将TypeDef(使用声明)和常量分组到一组类中,并在内部使用它们?,c++,scope,namespaces,traits,using,C++,Scope,Namespaces,Traits,Using,我试图找到一种方法,将我的项目使用的主要类型和常量分组到一个名称空间中,然后我想用“使用名称空间”将它们导入我的所有类中。我不明白为什么这段代码不能编译,g++错误说: expected nested-name-specifier before 'namespace' 要将所有类型和常量组合在一起,我需要哪些选项?我尝试将Traits设置为一个结构,然后使用继承,但这会给模板带来问题,另一种方法是在所有类中编写如下内容: using scalar_t = Traits::scalar_t;
expected nested-name-specifier before 'namespace'
要将所有类型和常量组合在一起,我需要哪些选项?我尝试将Traits设置为一个结构,然后使用继承,但这会给模板带来问题,另一种方法是在所有类中编写如下内容:
using scalar_t = Traits::scalar_t;
谢谢你给我小费
#include <iostream>
namespace Traits {
constexpr int N = 3;
using scalar_t = double;
};
struct Entity {
using namespace Traits; // problems here
scalar_t foo() const;
int n = N;
};
scalar_t Entity::foo() const { return N; } // problems here
int main()
{
Entity e;
e.foo();
return 0;
}
#包括
名称空间特性{
constexpr int N=3;
使用标量t=double;
};
结构实体{
使用名称空间特性;//这里有问题
标量foo()常量;
int n=n;
};
标量实体::foo()常量{return N;}//这里有问题
int main()
{
实体e;
e、 foo();
返回0;
}
该语言实际上不允许您在类范围内导入命名空间。您可以通过添加另一个间接级别来解决此问题,即。将类包装在名称空间中,当然可以在其中导入其他名称空间
namespace Indirection
{
using namespace Traits; // ok at namespace scope
// now everything from Traits is avaliable
struct Entity
{
scalar_t foo() const; // scalar_t is visible, yay!
int n = N;
};
scalar_t Entity::foo() const { return N; } // also ok, since in same namespace
}
当然,您不想再提及间接
名称空间,因此您可以将实体
从该名称空间中取出
using Indirection::Entity;
而现在,它似乎根本就不存在“间接的”
这里有一个问题。该语言实际上不允许您在类范围内导入名称空间。您可以通过添加另一个间接级别来解决此问题,即。将类包装在名称空间中,当然可以在其中导入其他名称空间
namespace Indirection
{
using namespace Traits; // ok at namespace scope
// now everything from Traits is avaliable
struct Entity
{
scalar_t foo() const; // scalar_t is visible, yay!
int n = N;
};
scalar_t Entity::foo() const { return N; } // also ok, since in same namespace
}
当然,您不想再提及间接
名称空间,因此您可以将实体
从该名称空间中取出
using Indirection::Entity;
而现在,它似乎根本就不存在“间接的”
这里有一个。结构的主体不是可以放置
using namespace
指令的地方<代码>实体::标量\u t-实体
不拥有该类型。在头文件中使用编写时应该非常小心。结构体不是可以放置使用命名空间
指令的位置<代码>实体::标量\u t
-实体
不拥有该类型。在头文件中使用编写时应该非常小心。