gpt4 book ai didi

c++ - c++模板中的一行区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:46 25 4
gpt4 key购买 nike

我得到了一些类,只有一个使用 .open 方法,而其他的使用 .load

是否有任何更聪明的方法来实现类似下面的(简化的)代码?或者我应该编辑上述类的定义吗?

template <class element> bool load (element & el, std::string file) {
bool status;
if (std::is_same <element, some_special_class>::value) {
status = el.open (file);
} else {
status = el.load (file);
}
// lot of code, based on status
return status;
}

这看起来好一点

void lotOfCode (bool status) {
if (status) {
// some code
} else {
// more code
}
}
template <class el> bool load (el & e, std::string f) {
bool status = e.load (f);
lotOfCode (status);
return status;
}
bool load (some_special_class & e, std::string f) {
bool status = e.open (f);
lotOfCode (status);
return status;
}

比这个

template <class element> bool load (element & el, std::string file) {
if (el.load (file)) {
// some code
return true; // loaded
}
// more code
return false;
}

bool load (some_special_class & el, std::string file) {
if (el.open (file)) {
// some code
return true; // loaded
}
// more code
return false;
}

但是它够好吗?

最佳答案

假设实际代码不像发布的那么简单,可能使用实际应用的操作自定义函数模板是合理的。例如:

template <typename T>
bool load_aux(T& t, std::string const& s) { return t.load(s); }
bool load_aux(some_special_case& t, std::string const& s) { return t.open(s); }

template <typename T>
bool load(T& t, std::string const& s) {
if (load_aux(t, s)) {
// some code
return true;
}
// some more code
return false;
}

关于c++ - c++模板中的一行区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com