我在类中有以下成员函数
class cls {
...
template <class T>
bool func(...) {
// Do something depending on <T>
}
...
}
我想将
func
更改为私有,而只有 func
公开的相关实例,例如像这样的
class cls {
...
private:
template <class T>
bool func(...) {
// Do something depending on <T>
}
...
public:
func_foo = func<FOO>;
func_bar = func<BAR>;
...
}
所以我可以做
cls c;
...
c.func_foo(...);
我知道我可以做类似的事情
bool func_bar(...) {
return func<BAR>(...);
}
但这有点难看,想知道是否有更好的方法来做到这一点
创建一个概念:
template <typename T, typename... U>
concept is_any_of = (std::same_as<T, U> || ...);
template <is_any_of<Foo, Bar, Baz> T>
bool func() {
// Do something depending on <T>
}
现在
T
仅限于 Foo
、Bar
或 Baz
。
这可以使用旧版本 C++ 中的 SFINAE 或
static_assert
来完成。
您现在将其称为
foo<Bar>
,并且只允许您提供的列表。
如果您需要私有访问其他类型(即只能使用
int
公开调用,但可以使用 double
私下调用),则编写两个版本(一个公共和一个私有), requires
公共的,并让它调用私人的。