Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在标头中使用命名空间的/typedef_C++_C++11_Namespaces_Typedef_Using - Fatal编程技术网

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