将泛型代码从c#转换为模板c++
convert generic code from c# to template c++
我尝试将这段代码(c#代码)转换为c++代码
public abstract class IGID<T>
where T : IGID<T>
如何在c++中实现这样的模板条件?
最好的方法是将static_assert
扔到一个空基类中,该基类将在构造时启动。您必须延迟到使用,因为所有类型必须完成后才能进行此类检查。
template <typename C>
struct Require {
Require() {
static_assert(C::value, "!");
}
};
为空,因此不会增加开销。然后是:
template<typename T>
struct IGID : Require<std::is_base_of<IGID<T>, T>>
{
};
即使T
在这里是不完整的,我们不检查任何东西,直到IGID<T>
被构造,所以我们没事。
struct A : IGID<A> { }; // okay
但:
struct B : IGID<int> { };
main.cpp:8:9: error: static_assert failed "!"
static_assert(C::value, "!");
^ ~~~~~~~~
main.cpp:13:8: note: in instantiation of member function 'Require<std::is_base_of<IGID<int>, int> >::Require' requested here
struct IGID : Require<std::is_base_of<IGID<T>, T>>
^
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++