【发布时间】:2020-08-21 14:22:52
【问题描述】:
我想创建一个专业化的类专业化 所有整数类型,另一个用于所有浮点类型,另一个用于布尔类型,以及 所有其他人都为我自己的类型,并且无法与其他任何人一起编译。
我希望整数用于 {signed or unsigned} * {short, int, long or long long}。 包含 char 是不可取的,但我可以忍受它。浮点 适用于 float、double 和 long double。
struct MyClass { /* ... */ };
template <class x> struct Specialise;
template <> struct Specialise <bool> { /* ... */ };
template <> struct Specialise <int> { /* for short, int, long ... */ };
template <> struct Specialise <double> { /* for float, double, long double */ };
template <> struct Specialise <MyClass> { /* ... */ };
我尝试过使用以下变体:-
template <typename x,typename=typename std::enable_if<std::is_integral<x>::value,x>::type>
但是编译器告诉我我一直弄错了。请问正确的语法是什么?
(我正在使用 C++14,但也许能够升级到 17。没有机会进行实验性 20。)
【问题讨论】:
-
编译器到底说了什么?
-
请在问题中包含minimal reproducible example 和错误消息