gpt4 book ai didi

c++ - 如何为模板化运算符指定模板参数

转载 作者:行者123 更新时间:2023-12-02 10:19:23 24 4
gpt4 key购买 nike

我有一个模板化的运算符作为类成员:

struct A {
template <bool s=true> auto operator[](int ) {}
};

我以以下(相当繁琐)的方式指定模板参数:

int main() {
A s;
s.template operator[]<false>(1);
}

这种破坏了使用运算符的“美感”(除了使用模板化运算符可能不是最佳实践这一事实之外;我在我的代码中使用它来获得有条件的 const 返回类型,而无需重新实现逻辑和仅在 at 实现内部使用模板)。

是否有更简洁的表示法来指定模板参数?

最佳答案

您可以将传递的参数包装在可以推断的模板类中,有点像标签调度:

template<bool s>
struct A_index { // A shorter name based on your use case
int i;
};

struct A {
template<bool s> auto operator[](A_index<s> i_) {
int i = i_.i;
// Use `i`
}
auto operator[](int i) { (*this)[A_index<true>{ i }]; } // For your default = true
};

int main() {
A s;
s[A_index<false>{1}];

using t = A_index<true>;
s[t{0}];
}

或者,您可以拥有一个具有 A& 的帮助模板结构。结构具有模板参数的引用:

struct A {
};

template<bool s = true>
struct A_index {
A& a;

auto operator[](int i) { }
};

int main() {
A s;
A_index<false> view{ s };
view[1];
}

或者您可以只使用非运算符成员函数。

关于c++ - 如何为模板化运算符指定模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60914638/

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