gpt4 book ai didi

c++ - 检查类型是否具有在 C++ 中定义的 [][]

转载 作者:行者123 更新时间:2023-11-27 22:42:02 26 4
gpt4 key购买 nike

我正在编写构造函数,并希望为实现 [][] 的任何类型定义它对于积分参数。换句话说,类型 T必须有 T[]使用 [] 时定义和返回的类型在 T本身也有[]已定义,允许例如 T[2][3]被调用。

我知道如何使用答案 here 检查是否存在重载运算符这显示了 operator== 的方法,这可以很容易地扩展到我的案例。

但问题是我想检查 T[] 的类型还有operator[] .

如前所述,我还需要检查重载的 operator[] 接受的参数包括任何整数类型,所以 operator[](const T& i)会有一些 T产生 std::is_integral<T>::value是真的。

显然,我的目的是让界面接受任何表现的东西,例如具有访问其元素的标准方法的矩阵。

最佳答案

你可以 sfinae 例如在 std::declval<const T>()[1][1]

template<class T, class = decltype(std::declval<const T&>()[1][1])>
void foo(const T& matrix){
...
}

或:

template<class T, decltype(void(std::declval<const T&>()[1][1]),true)=true>
void foo(const T& matrix){
...
}

如果您选择了多个 SFINAE,哪个效果更好 foo过载。

*) 我在手机上,所以我还没有用编译器检查过。

关于c++ - 检查类型是否具有在 C++ 中定义的 [][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48132876/

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