我不熟悉模板,但我想知道,是否可以将它们用于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作为对象的参数引用,而不是复制它,这可能会慢一点?
我是模板的新手.我尝试为函数模板定义专用模板,但我的编译器返回错误.它是简单的最大功能,只写练习模板; 这是代码:
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建议:"没有功能模板的实例"
我应该改变什么来使这个编译和正常工作?
提前致谢
我编写了一个程序,用于计算流水车间调度问题。
我需要帮助来优化程序中最慢的部分:
首先是数组二维数组分配:
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万个元素的数组-分配它需要不到一秒钟的时间,而删除要花一分钟多的时间。
我将对改善删除部分的任何建议表示赞赏。