相关疑难解决方法(0)

如何在检测成语中要求精确的函数签名?

假设我有一个类型T,我想检测它是否有一个下标操作符,我可以用另一种类型调用它Index.以下示例工作得很好:

#include <type_traits>
#include <vector>

template < typename T, typename Index >
using subscript_t = decltype(std::declval<T>()[std::declval<Index>()]);

int main()
{
    using a = subscript_t< std::vector<int>, size_t >;
    using b = subscript_t< std::vector<int>, int    >;
}
Run Code Online (Sandbox Code Playgroud)

但是,当且仅当函数签名完全匹配时,我希望检测函数.在上面的例子中,我希望语句subscript_t< std::vector<int>, int >;抛出一个错误no viable overloaded operator[],因为下标运算符的签名std::vector

std::vector<T, std::allocator<T>>::operator[](size_type pos);
Run Code Online (Sandbox Code Playgroud)

size_typeGCC 在哪里unsigned long.如何避免隐式转换从intsize_t要发生?

c++ templates types type-conversion c++11

4
推荐指数
1
解决办法
716
查看次数

如何检查类中是否存在成员名称(变量或函数),是否指定了类型?

这个Q是以下的扩展:
是否可以编写C++模板来检查函数的存在?

是否有任何有助于找到的实用程序:

  • 如果某个成员名称存在于某个类中?该成员可以是变量或方法.
  • 指定成员的类型应该是可选的

c++ macros templates class member

3
推荐指数
2
解决办法
3991
查看次数

标签 统计

c++ ×2

templates ×2

c++11 ×1

class ×1

macros ×1

member ×1

type-conversion ×1

types ×1