小编Mic*_*ael的帖子

模板特化是否属于标题或源文件?

在编译期间,我得到一个"多重定义"错误,它指的是头文件中的模板特化.我需要将专业化放入源文件中吗?

c++ templates header-files

19
推荐指数
2
解决办法
8079
查看次数

如何在boost :: program_options中为vector <string>指定默认值

我想为代码中的注释提供位置参数的默认值,但编译器会抱怨.这个代码编译得很好.我使用boost 1.46.1和g ++

int main(int argc, char *argv[]) {
    namespace po = boost::program_options;

    po::positional_options_description p;
    p.add("path", -1);

    po::options_description desc("Options");
    std::vector<std::string> vec_str;
    std::string str;
    desc.add_options()
        ("foo,f", po::value< std::string >()->default_value(str), "bar")
        //("path,p", po::value< std::vector<std::string> >()->default_value(vec_str), "input files.")
        ("path,p", po::value< std::vector<std::string> >(), "input files.")
    ;

    po::variables_map vm;
    po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
    po::notify(vm);
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-program-options

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

如果复制了容器,则在哪种情况下调用复制构造函数

我测试了以下代码:

#include <iostream>
#include <vector>

class foo {
public:
    int m_data;
    foo(int data) : m_data(data) {
        std::cout << "parameterised constructor" << std::endl;
    }
    foo(const foo &other) : m_data(other.m_data) {
        std::cout << "copy constructor" << std::endl;
    }
};

main (int argc, char *argv[]) {
    std::vector<foo> a(3, foo(3));
    std::vector<foo> b(4, foo(4));
    //std::vector<foo> b(3, foo(4));
    std::cout << "a = b" << std::endl;
    a = b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我明白了

   parameterised constructor
   copy constructor
   copy constructor
   copy constructor
   parameterised constructor
   copy constructor
   copy constructor …
Run Code Online (Sandbox Code Playgroud)

c++ constructor stl

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

为什么界面需要重新声明?

我有一个抽象的基类,并希望在派生类中实现一个函数.为什么我必须再次在派生类中声明该函数?

class base {
public:
    virtual int foo(int) const = 0;
};

class derived : public base {
public:
    int foo(int) const; // Why is this required?
};

int derived::foo(int val) const { return 2*val; }
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

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

使用基类的重载函数

我尝试做类似的事情

class base {
public:
    virtual double operator() (double val) = 0;
    virtual double operator() (double prev, double val) {
        return prev + operator()(val);
    }
};

class derived: public base {
    virtual double operator() (double val) {
        return someting_clever;
    }
};
Run Code Online (Sandbox Code Playgroud)

我想重载operator()以使用不同的算法,如std :: accumulate或std :: transform.我对operator()(double,double)的基类定义非常满意.但是我无法从派生类中调用它.我是否必须为从基础派生的每个类重写相同的代码?

c++ overloading derived-class

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

有部分和的函数吗?

我想做点什么

foo = c(1, 1, 1)
bar = magic_function(foo, sum, init=0)
Run Code Online (Sandbox Code Playgroud)

其中bar1 2 3,即的部分和foo.是否有这样的功能,或者最好的方法是什么(避免for-loop)?

r

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

std :: sort如何仅使用迭代器实现交换操作?

我该如何实现以下内容

template <typename ITERATOR> void Swap (ITERATOR a, ITERATOR b) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

因此Swap(a,b)交换a和b指向的值.换句话说:如何在不知道数据类型的情况下创建第三个变量?

c++ algorithm stl

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