我有一个带有模板参数的类,我想调用它的一个方法。它看起来像这样:
template <typename T>
class Foo {
public:
void doSomething() {
for (auto& t: ts) {
t.doSomething();
}
}
private:
std::vector<T> ts;
};
这是可行的,但如果T
本身是常量(假设T::doSomething()
也将是常量),我想使doSomething()
成为常量。我找到了一个可能的解决方案(基于这个问题),但我不喜欢。
template <bool enabled = std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() const {
for (auto& t: ts) {
t.doSomething();
}
}
template <bool enabled = !std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() {
for (auto& t: ts) {
t.doSomething();
}
}
它工作正常,但有代码重复。有什么办法可以避免吗?
虽然不完美,但这里有一个解决方法:我们有一个非const成员_doSomething()
,其中const和非const的代码相同,除了在底层对象上调用的函数。由于此成员是nonconst
,我们必须const_cast
this
才能从const Foo调用它。
由于\u doSomething
中的代码是常量安全的,因此(常量)将常量
丢弃是安全的。
你的代码也不会编译成常量,因为你不能拥有const
的vector
。向量的元素必须是可赋值的,而常量类型
通常是不可赋值的(但它们确实不应该是:https://stackoverflow.com/a/17313104/258418).
您可能需要考虑std::vector
#include <iostream>
#include <vector>
using namespace std;
class Bar {
public:
Bar() {}
void doSomething() const {
std::cout << "const" << endl;
}
void doSomething() {
std::cout << "NON const" << endl;
}
};
template <typename T>
class Foo {
void _doSomething() {
/*for (auto& t: ts) {
t.doSomething();
}*/
test.doSomething();
}
public:
Foo()/*T element) : ts({element})*/ {}
template <bool enabled = std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() const {
const_cast<typename std::remove_const<Foo<T>>::type*>(this)->_doSomething();
}
template <bool enabled = !std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() {
_doSomething();
}
private:
//std::vector<T> ts; https://stackoverflow.com/a/17313104/258418
T test;
};
int main()
{
Foo<Bar> nonConstInst;
Foo<const Bar> ConstInst;
nonConstInst.doSomething();
ConstInst.doSomething();
return 0;
}
问题内容: 我有一个项目,需要根据用户选择的选择参数设置环境变量。每个项目都有一个主题项目依赖项。我想让用户选择项目,然后从属性文件中加载主题名称。就像是 如果用户从choice参数中选择,我想自动设置为。最好的方法是什么? 每当添加新项目时,我都不想修改Jenkins作业配置。相反,我想将映射保存在文件中,以便可以在版本控制中使用它。 问题答案: 啊哈,我找到了一个简单的解决方案!使用EnvIn
std=C14的g在函子类的模板方法(本身不是模板)上给我一个“无法推断模板参数'Key'”错误。我不知道为什么。代码看起来应该可以工作。 我正在实现一个2-3树,它有一个采用函子的层次顺序遍历方法。操作人员tree23代码基本上是这样的: 级别顺序遍历调用仿函数的函数调用操作符,向其传递两个参数。 函子非常简单:
我正在尝试根据传递到作业中的参数在Jenkins管道作业中设置环境变量;这样,我可以在需要它的管道的每个阶段使用环境变量。我尝试在环境块中使用Switch语句: 然而,这并不起作用,该作业试图将等号之前的所有行评估为KEY名称: 我该如何让它工作?
1)审批模板设置/添加/编辑 ①模板管理-新建模板-可自定义模板/直接选择提供的模板快速创建 ②填写模板信息,完成表单设计:审批设计器-拖动控件库-右侧自由编辑控件及表单-设置可见范围 2)审批流程设置 添加审批步骤-设置审批人(同一审批步骤存在多个审批人可选择审批方式)-设置每个步骤的审批人的表单查看权限-预设抄送人 ①设置审批步骤 ②设置审批人 ③选择审批方式 ④设置表单权限 ⑤预设抄送人
我想通过另一个模板参数来指定模板化函数的返回类型。所有这些都在一个类中。 在头文件中:
是否可以根据SpringAOP中的参数名称获取方法参数值。 这种方法将获得参数名,而不是值。 将返回值而不是名称 那么是否可以根据参数名获取值?