我在测试应用程序中有std::placeholder
的用例,但我想知道,为了使API方面看起来更清洁,是否有办法弯曲using
,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.
这纯粹是语义上的,也只是努力了解using
关键字的性质。更多的学习经验,然后是现实世界的应用程序主张。
干杯
答案 0 :(得分:2)
努力使API方面看起来更清洁
理想情况下,您根本不应在API中公开占位符。如果您这样做,则表示您尚未在上面的代码中显示它。
如果您只是在实现中使用占位符,则以下操作将起到作用:
ProcessFunction DataRequestProcessor::prepOne()
{
using namespace std::placeholders;
auto func = std::bind( &DataModel::setData,
m_model,
_1 );
return func;
}
答案 1 :(得分:2)
如果您希望它在标题级别,那么引入命名空间别名就是一个简单的问题:
namespace RequestResultHandle = std::placeholders;
然而,上面的内容不会被接受。
答案 2 :(得分:0)
您无法使用using
指令为namespace
添加别名。
如果您有动力,可以定义自己的namespace
,其中您可以在其中命名来自其他命名空间的特定类型。
namespace RequestResultHandle
{
using _1 = std::placeholders::_1;
using _2 = std::placeholders::_2;
...
}
现在,您可以使用RequestResultHandle::_1
代替std::placeholders::_1
。