【发布时间】:2017-05-18 21:07:00
【问题描述】:
我在测试应用程序中有一个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 关键字的性质。更多的是学习体验,而不是现实世界的应用主张。
干杯
【问题讨论】:
-
你可以做一个命名空间别名(
std::placeholder是一个命名空间,而不是一个类型),但它必须在命名空间或函数范围内:namespace RequestResultHandle = std::placeholder) -
“不行”不是可接受的问题陈述。
-
这与
std::placeholders(或std::placeholder,不存在)无关,如果您玩过并发现这个问题是关于您如何使用命名空间别名(不能在类范围内)。 -
啊,是的。
std::placeholders是我的意思:)谢谢你们。
标签: c++ c++11 namespaces typedef using