gpt4 book ai didi

c++ - 模板参数包无法推断 `const&` 参数

转载 作者:行者123 更新时间:2023-11-30 03:35:40 25 4
gpt4 key购买 nike

所以我有一个类:

struct C {
int x[10];

int const& get(int i) const { return x[i]; }

template<typename... Ts>
auto& get(Ts... args) {
int const& (C::*f)(Ts...) const = &C::get;
return const_cast<int&>((this->*f)(args...));
}
};

并且模板将根据需要生成一个非const getter,因此这变得合法:

int& test(C& c) {
int i = 4;
int& r = c.get(i);
return r;
}

但如果我将原始 getter 的参数类型更改为引用:

  int const& get(int const& i) const { return x[i]; }

const getter 模板不再匹配const getter。

显然,按值传递 int 没什么大不了的,将参数列表显式传递给模板也没什么大不了的,但是我有更复杂的参数和大量重载,我想以最少的复制粘贴来推断我所有的非const getter。

有什么办法可以解决这个问题吗?


我的一个想法是我可以在类中声明问题参数列表,但将定义留给模板,这样参数匹配会有一些指导。我尝试将以下内容添加到类中(在模板之前或之后):

  int& get(int const& i);

不幸的是,这会完全绕过模板并导致链接错误。向声明中添加 inlinetemplate 似乎也无济于事。

最佳答案

为什么要通过指向成员函数的辅助指针强制调用 const 成员函数?在这种情况下,我使用 thisconst 限定:

template<typename... Ts>
auto& get(Ts... args) {
const C* const const_this = this;
return const_cast<int&>(const_this->get(args...));
}

关于c++ - 模板参数包无法推断 `const&` 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41156509/

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