如何在C 11中仅接受模板中的数字和字符串
How to accept only numbers and strings in templates in C++11?
正如Titlte所说的,在C 11中,如何声明仅接受数字(int
,long
,float
和double
(和字符串的模板?
template<typename T>
class CustomClass {
public:
T data;
};
将其放在类定义中的任何位置:
static_assert(std::is_arithmetic<T>::value ||
std::is_same<T, std::string>::value,
"Wrong argument type");
调整条件以品尝。
示例,使用模板部分专业化和模板默认值。
的东西template <typename T, bool = std::is_arithmetic<T>::value
|| std::is_same<T, std::string>::value>
class CustomClass;
template <typename T>
class CustomClass<T, true>
{
public:
T data;
};
所以你可以拥有
CustomClass<int> cci;
CustomClass<std::string> ccs;
// CustomClass<std::istringstream> cciss; // compilation error
我知道问题似乎特定于C 11。但是语言改善了。可以使用C 20的概念。(#include <concepts>
(。
使用如下所示的需要的关键字,并应用条件。
requires std::integral<T> || std::floating_point<T> || std::is_convertible_v<T, std::string_view>
示例用法和测试:
//SAMPLE CLASS
class Sample
{
};
template<typename T>
//ALLOW INTEGER TYPES, FLOATING POINT TYPES, STRING TYPES.
requires std::integral<T> || std::floating_point<T> || std::is_convertible_v<T, std::string_view>
class CustomClass {
public:
T data;
};
//ALLOWED
CustomClass<int> C_Int;
C_Int.data = 10;
//ALLOWED
CustomClass<std::string> C_Str;
C_Str.data = "Test";
//NOT ALLOWED UNLESS THE requires IS COMMENTED IN ABOVE CODE.
Sample s;
CustomClass<Sample> C_Sample;
C_Sample.data = s;
相关文章:
- 生成随机长度的数字字符串
- 如何在c ++中将大数字字符串转换为整数?
- 将非数字字符串存储为二进制整数
- Flex 词法分析器规则,对包含连字符和斜杠的字母数字字符串具有积极的前瞻断言
- 如何在C++中将数字字符串拆分为数组
- 总结数字字符串输入的最佳方法
- 如何将输入的数字字符串转换为 int 数组
- 如何获得两个数字字符串的总和-C
- 使用 C++ 替换 txt 文件中的文本数字字符串
- 如何有效地将数字字符串值分配给整数
- String Stream in C++ 解析单词和数字字符串
- c++将大型数字字符串映射到数字字符串范围
- 获取用数字字符串表示的树中的所有直接父级/子级
- 如何从 char 数组中提取数字字符串成员
- 比较两个字母数字字符串
- 有没有一种方法可以设置浮点变量=某个数字*字符串中的变量
- 使用矢量对字母数字字符串进行排序
- 正在分析未知类型的数字字符串
- 如何在c++中从一个科学数字字符串中修剪后面的零
- 无法将字符串数组中的数字字符串转换为浮点值