C++ 在标头中使用命名空间的/typedef
我有一个测试应用程序中的C++ 在标头中使用命名空间的/typedef,c++,c++11,namespaces,typedef,using,C++,C++11,Namespaces,Typedef,Using,我有一个测试应用程序中的std::placeholder用例,但我想知道,为了让API方面的东西看起来更干净一点,是否有一种方法可以使用、typedef甚至#define在头级别名名称空间 // .../datarequestprocessor.h class DataRequestProcessor { public: using ProcessFunction = std::function<void(const ResultData &)>; using
std::placeholder
用例,但我想知道,为了让API方面的东西看起来更干净一点,是否有一种方法可以使用、typedef
甚至#define
在头级别名名称空间
// .../datarequestprocessor.h
class DataRequestProcessor {
public:
using ProcessFunction = std::function<void(const ResultData &)>;
using RequestResultHandle = std::placeholders; // No go. Same with ::_1
...
};
// ../datarequestprocessor.cpp
ProcessFunction DataRequestProcessor::prepOne()
{
auto func = std::bind( &DataModel::setData,
m_model,
RequestResultHandle::_1 );
return func;
}
... // For other variations.
/…/datarequestprocessor.h
类DataRequestProcessor{
公众:
使用ProcessFunction=std::function;
使用RequestResultHandle=std::placeholders;//不可以。与以下内容相同::\u 1
...
};
//../datarequestprocessor.cpp
ProcessFunction DataRequestProcessor::prepOne()
{
auto func=std::bind(&DataModel::setData),
m_模型,
RequestResultHandle::_1);
返回函数;
}
... // 对于其他变体。
这纯粹是语义上的,也是为了使用
关键字了解的本质。更多的是一种学习体验,而不是现实世界中的应用主张
干杯
努力使API方面的东西看起来更干净
理想情况下,您根本不应该在API中公开占位符。如果您正在这样做,那么您没有在上面的代码中显示它
如果您只是在实现中使用占位符,则以下操作可以实现此目的:
ProcessFunction DataRequestProcessor::prepOne()
{
using namespace std::placeholders;
auto func = std::bind( &DataModel::setData,
m_model,
_1 );
return func;
}
努力使API方面的东西看起来更干净
理想情况下,您根本不应该在API中公开占位符。如果您正在这样做,那么您没有在上面的代码中显示它
如果您只是在实现中使用占位符,则以下操作可以实现此目的:
ProcessFunction DataRequestProcessor::prepOne()
{
using namespace std::placeholders;
auto func = std::bind( &DataModel::setData,
m_model,
_1 );
return func;
}
如果希望在头级别使用它,那么只需引入名称空间别名即可:
namespace RequestResultHandle = std::placeholders;
但是,在类内部不接受上述内容。如果希望在头级别使用它,则只需引入名称空间别名:
namespace RequestResultHandle = std::placeholders;
但是,类内部不接受上述内容。您不能使用using
指令来别名命名空间
如果您有动机,您可以定义自己的命名空间
,在其中您可以从另一个命名空间中别名特定类型
namespace RequestResultHandle
{
using _1 = std::placeholders::_1;
using _2 = std::placeholders::_2;
...
}
现在,您可以使用RequestResultHandle::_1
而不是std::placeholder::_1
您不能使用using
指令来别名命名空间
如果您有动机,您可以定义自己的命名空间
,在其中您可以从另一个命名空间中别名特定类型
namespace RequestResultHandle
{
using _1 = std::placeholders::_1;
using _2 = std::placeholders::_2;
...
}
现在,您可以使用RequestResultHandle::_1
而不是std::placeholder::_1
您可以创建名称空间别名(std::placeholder
是名称空间,而不是类型),但它必须位于名称空间或函数作用域:namespace RequestResultHandle=std::placeholder
)“不可以”不是一个可接受的问题陈述。这与std::placeholder
(或std::placeholder
,它不存在)无关,如果您仔细研究并发现这个问题是关于如何使用命名空间别名(不能在类范围内)。啊,是的std::placeholder
是我想要键入的:)谢谢大家。你们可以使用名称空间别名(std::placeholder
是名称空间,不是类型),但它必须位于名称空间或函数范围:namespace RequestResultHandle=std::placeholder
)“不可以”不是一个可接受的问题陈述。这与std::placeholder
(或std::placeholder
,它不存在)无关,如果您仔细研究并发现这个问题是关于如何使用命名空间别名(不能在类范围内)。啊,是的<代码>std::占位符
就是我想输入的:)谢谢大家。没有什么东西是std::占位符
@BoundaryImposition-Gee,嫉妒我输入错误的“为什么不呢?这实际上是现在最好的答案^ ^没有std::占位符
@BoundaryImposition-Gee,嫉妒我输入了一个错误的's'why don'yout这实际上是现在最好的答案^ ^“你不能使用using指令来别名一个名称空间。”不,但是只需要一个小的调整(比如说名称空间而不是联合),而不需要依次命名每个名称空间成员。@BoundaryImposition,你刚才说的是union
而不是使用?你正在失去你的联系:)已经晚了哈哈:D“你不能使用using指令来别名一个名称空间。”不可以,但是只需要一个小的调整(说名称空间而不是联合),而不需要依次命名每个名称空间成员。@BoundaryPosition,你刚才是说联合而不是使用?你失去了你的触摸:)已经很晚了哈哈:快点。是的,API级别可能不是最好的。它应该在队列中进行更多的内部工作。谢谢你的意见!我只是希望结果是,基于模型setData
函数的不同意愿,可以使用“漂亮”字,而不是使用std::占位符
,我们需要在任何地方应用bind
。是的,API级别可能不是最好的。它应该在队列中进行更多的内部工作。谢谢你的意见!我只是希望结果是,基于模型setData
函数的不同意愿,可以使用“漂亮”字,而不是使用std::占位符
我们需要应用bind