header 中的 using/typedef 个命名空间
using/typedef of namespace in header
我在测试应用程序中有一个 std::placeholder
的用例,但我想知道,为了使 API 方面的事情看起来更清晰,是否有一种方法可以将 using
、typedef
甚至 #define
弯曲为 header 级别的命名空间别名。
// .../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
关键字的性质。更多的是学习经验,然后是现实世界的应用命题。
干杯
in an effort to make things look a little cleaner on an API side
理想情况下,您根本不应该在 API 中公开占位符。如果你这样做,你没有在上面的代码中显示它。
如果您只是在实现中使用占位符,以下方法可以解决问题:
ProcessFunction DataRequestProcessor::prepOne()
{
using namespace std::placeholders;
auto func = std::bind( &DataModel::setData,
m_model,
_1 );
return func;
}
如果你想在header级别,那么引入命名空间别名是一件简单的事情:
namespace RequestResultHandle = std::placeholders;
但是 class 不会接受以上内容。
您不能使用 using
指令为 namespace
添加别名。
如果你有动力,你可以定义你自己的 namespace
,你可以在其中为来自另一个命名空间的特定类型起别名。
namespace RequestResultHandle
{
using _1 = std::placeholders::_1;
using _2 = std::placeholders::_2;
...
}
现在,您可以使用 RequestResultHandle::_1
而不是 std::placeholders::_1
。
我在测试应用程序中有一个 std::placeholder
的用例,但我想知道,为了使 API 方面的事情看起来更清晰,是否有一种方法可以将 using
、typedef
甚至 #define
弯曲为 header 级别的命名空间别名。
// .../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
关键字的性质。更多的是学习经验,然后是现实世界的应用命题。
干杯
in an effort to make things look a little cleaner on an API side
理想情况下,您根本不应该在 API 中公开占位符。如果你这样做,你没有在上面的代码中显示它。
如果您只是在实现中使用占位符,以下方法可以解决问题:
ProcessFunction DataRequestProcessor::prepOne()
{
using namespace std::placeholders;
auto func = std::bind( &DataModel::setData,
m_model,
_1 );
return func;
}
如果你想在header级别,那么引入命名空间别名是一件简单的事情:
namespace RequestResultHandle = std::placeholders;
但是 class 不会接受以上内容。
您不能使用 using
指令为 namespace
添加别名。
如果你有动力,你可以定义你自己的 namespace
,你可以在其中为来自另一个命名空间的特定类型起别名。
namespace RequestResultHandle
{
using _1 = std::placeholders::_1;
using _2 = std::placeholders::_2;
...
}
现在,您可以使用 RequestResultHandle::_1
而不是 std::placeholders::_1
。