小编SH.*_*x90的帖子

std :: make_shared与std :: initializer_list

#include <iostream>
#include <memory>

class Base
{
public:
    Base() {}
};

class Derived : public Base
{
public:
    Derived() {}
    Derived(std::initializer_list<std::pair<int, std::shared_ptr<Base>>>) {}
};

int main(int argc, char ** argv)
{
    auto example = new Derived({
        { 0, std::make_shared<Derived>() }
    });

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理(实时预览)正常,但是当我尝试使用std::make_sharedstd::initializer_list作为参数,我得到了错误:

auto example = new Derived({
    { 0, std::make_shared<Derived>({
        { 0, std::make_shared<Derived>() }
    }) }
});
Run Code Online (Sandbox Code Playgroud)

正如您在实时预览中看到的那样.

错误:功能参数太多......

它仅适用于我这样做(实时预览):

auto example = new Derived({
    { 0, …
Run Code Online (Sandbox Code Playgroud)

c++ std c++11

17
推荐指数
2
解决办法
4449
查看次数

类似于std :: map或std :: vector的构造函数

我正在创建一个类,我想知道如何创建类似于std::mapstd::vector样式的构造函数.

std::map<std::string, std::string> map = {
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};
Run Code Online (Sandbox Code Playgroud)

不同之处在于我不希望我的班级要求接受的类型,就像std::map那样.

std::map<std::string, std::string>
Run Code Online (Sandbox Code Playgroud)

我希望我的班级接受这种风格的论点:

{
    {"foo", "bar"},
    {"biz", "buz"},
    {"bez", "boz"}
};
Run Code Online (Sandbox Code Playgroud)

但是有定义的类型.(std :: string,Typer)

'Typer'是一个我将作为值插入的类std::map.

c++ vector std c++11

12
推荐指数
1
解决办法
1337
查看次数

MinGW与MinGW-W64对比交叉编译中的MSVC(VC++)

让我们这样说:我们将创建一个需要跨平台的库,我们选择GCC作为编译器,它在Linux上运行得非常好,我们需要在Windows上编译它,我们让MinGW完成工作.

MinGW尝试实现一种在Windows上编译C++的本机方式,但它不支持像mutex和等一些功能threads.

我们有MinGW-W64是支持这些功能的MinGW的分支,我想知道哪一个使用?知道GCC是最常用的C++编译器之一.或者最好在Linux上使用MSVC(VC++),在Linux上使用GCC,并使用CMake处理独立编译器?

提前致谢.

c++ gcc mingw visual-c++ mingw-w64

5
推荐指数
2
解决办法
6923
查看次数

将std :: initializer_list插入std :: map

我有这样的方法:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<std::string, int>> input)
{
    // insert 'input' into map...
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样调用这个方法:

myMap({
    {"foo", 1}
});
Run Code Online (Sandbox Code Playgroud)

我如何转换我的自定义参数并插入到地图中?

我试过了:

container = input;

container(input);
Run Code Online (Sandbox Code Playgroud)

但是不要工作,因为地图的参数只是,std::initializer_list并且那里没有std::pair.

谢谢你们.

c++ stdmap std c++11

3
推荐指数
2
解决办法
1792
查看次数

知道循环中std :: string的结束

我想知道如何知道循环中std :: string的结束?

例如:

while(string.eof()) {}
Run Code Online (Sandbox Code Playgroud)

记住它与std :: string一起使用

谢谢你们.

c++ string std c++11

1
推荐指数
1
解决办法
141
查看次数

如何检测字符串中的转义

我正在尝试这样做:

#include <iostream>

std::string message = "Hello\r\"world\"";

int main() {
    if (message[5] == '\\') {
        switch (message[6]) {
            case 'r':
                std::cout << "\\r escape..." << std::endl;
            break;
            case '"':
                std::cout << "\" escape..." << std::endl;
            break;
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道逻辑上是正确的,但是如果你理解我想要做什么,你会注意到我想知道字符串是否存在转义.如果角色是逃脱,请执行上面看到的(开关).

那可能吗?谢谢.

c++ c++11

1
推荐指数
1
解决办法
259
查看次数

标签 统计

c++ ×6

c++11 ×5

std ×4

gcc ×1

mingw ×1

mingw-w64 ×1

stdmap ×1

string ×1

vector ×1

visual-c++ ×1