小编Ove*_*ain的帖子

安装者和吸气剂的模板

我不熟悉模板,但我想知道,是否可以将它们用于setter和getter方法.例如在这种情况下:

double exmlClass::getA(void) const
{
    return a_;
}



void exmlClass::setA(const double& a)
{
    a_ = a;
}



double exmlClass::getB(void) const
{
    return b_;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,方法几乎相同,除了它们引用另一个私有变量(a_,b_,c_).是否有更优雅的方式来编写这些函数,或者在这种情况下通常如上所述?如果它常用于使用模板,我将很感激您将如何在上面的代码中使用它们.

我要问的另一个问题是如何恰当地宣布吸气剂和二传手.编码风格好吗?

double getA(void) const;
void setA(const double& a);

double getB(void) const;
void setB(const double& b);

double getC(void) const;
void setC(const double& c);
Run Code Online (Sandbox Code Playgroud)

我的意思是应该getter总是const和setter作为对象的参数引用,而不是复制它,这可能会慢一点?

c++ getter setter templates

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

功能专用模板问题

我是模板的新手.我尝试为函数模板定义专用模板,但我的编译器返回错误.它是简单的最大功能,只写练习模板; 这是代码:

template <typename TYP1, typename TYP2> TYP1 maximum(TYP1& param1, TYP2& param2)
{
    return (param1 > param2 ? param1 : param2);
}
Run Code Online (Sandbox Code Playgroud)

和专业功能:

template<> std::string maximum<std::string, std::string>(std::string prm1, std::string prm2)
{
    std::cout << "Inside specialized functiion\n";
    return (prm1.length() > prm2.length() ? prm1 : prm2);
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试为std :: string或任何其他类型编写特化,包括我自己定义的类,则无关紧要 - 错误总是相同的:

"错误C2912:显式特化;'std :: string maximum(std :: string,std :: string)'不是函数模板的特化......"

IntelliSense建议:"没有功能模板的实例"

我应该改变什么来使这个编译和正常工作?

提前致谢

c++ templates template-specialization

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

删除[]个性能问题

我编写了一个程序,用于计算流水车间调度问题。

我需要帮助来优化程序中最慢的部分:

首先是数组二维数组分配:

this->_perm = new Chromosome*[f];

//... for (...)

this->_perm[i] = new Chromosome[fM1];
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我尝试删除数组时出现问题:

delete [] _perm[i];
Run Code Online (Sandbox Code Playgroud)

执行上面的行需要花费极长时间。Chromosome是大约30万个元素的数组-分配它需要不到一秒钟的时间,而删除要花一分钟多的时间。

我将对改善删除部分的任何建议表示赞赏。

c++ arrays performance memory-management

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