作为 OpenCL 绑定的 DSL 的一部分,我必须计算给函数的参数f
并单独处理它们,在下面的代码中,这将是h
. 对于大多数类型,该函数应该接受 LValues 和 RValues。但是,对于某些类型(此处int
:),只有 LValue 引用是可接受的(在实际代码中,这些是可能需要延迟初始化的对象)。
我的问题:我该如何摆脱它const_cast
?f(T...)
不起作用,也不起作用f(T&...)
或f(T&&...)
template<typename T>
void h(int i, const T &x) {/* generic things */}
void h(int i, const int &x) { const_cast<int&>(x) = 123; }
template<int i> void g() {}
template<int i, typename H, typename... T>
void g(H &x, T... xs) {
h(i, x);
g<i + 1>(xs...);
}
template<typename... T>
void f(const T&... xs) { g<0u>(xs...); }
#include <cassert>
int main(int, char**) {
int x = 1;
f(x, 2.0 + 3.0, 'c');
assert(x == 123);
}