相关疑难解决方法(0)

SFINAE模板专业化优先级

#include <iostream>
#include <array>
#include <vector>

template <typename T, typename SFINAE=void>
struct trait;

template <typename T>
struct trait<T, decltype(
  std::declval<const T&>().begin(),
  std::declval<const T&>().end(),
  void()
)> {
  static const char* name() { return "Container"; }
};

template <typename T, std::size_t N>
struct trait<std::array<T,N>> {
  static const char* name() { return "std::array"; }
};

int main(int argc, char* argv[]) {
  std::cout << trait<std::vector<int>>::name() << std::endl;
  std::cout << trait<std::array<int,2>>::name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我期待第三个模板比第二个模板更专业,但我得到了一个模糊的模板实例化.

有没有办法让第三个模板更专业?明确检查是否Tstd::array在第二个模板不会为我工作.我正在写一个图书馆,希望用户能够定义他们自己的专业trait.第二个模板旨在成为没有更具体特征的容器的通用特化.

c++ templates sfinae template-specialization

16
推荐指数
1
解决办法
348
查看次数

标签 统计

c++ ×1

sfinae ×1

template-specialization ×1

templates ×1