- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看过this answer ,我尝试为其中的代码提供一个变量模板实用程序:
template <class T, template <class...> class Template>
struct is_specialization : std::false_type {};
template <template <class...> class Template, class... Args>
struct is_specialization<Template<Args...>, Template> : std::true_type {};
并像这样实现它:
template <template <class...> class Template, class... Args>
constexpr bool is_specialization_v = is_specialization<Template<Args...>, Template>::value;
因为这就是我在<type_traits>
的头文件中看到类似实用程序的实现方式。 。例如:
template <typename _Tp, typename _Up>
inline constexpr bool is_same_v = is_same<_Tp, _Up>::value;
template <typename _Base, typename _Derived>
inline constexpr bool is_base_of_v = is_base_of<_Base, _Derived>::value;
template <typename _From, typename _To>
inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
等等。 (来自MinGW的GCC 8.2.0实现)
但问题是,虽然::value
语法似乎有效, *_v
语法不:
int main() {
bool foo = is_specialization<std::vector<int>, std::vector>::value; // No problem
bool bar = is_specialization_v<std::vector<int>, std::vector>; // compilation error!
std::cout << foo << ' ' << bar;
}
这会产生以下错误:
error: type/value mismatch at argument 1 in template parameter list for 'template<template<class ...> class Template, class ... Args> constexpr const bool is_specialization_v<Template, Args ...>'
bool bar = is_specialization_v<std::vector<int>, std::vector>; // compilation error!
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: expected a class template, got 'std::vector<int>'
error: type/value mismatch at argument 2 in template parameter list for 'template<template<class ...> class Template, class ... Args> constexpr const bool is_specialization_v<Template, Args ...>'
expected a type, got 'vector'
这是为什么呢?老实说,这个错误对我来说似乎很公平,并让我思考上述答案中的代码到底是如何工作的。它期望 class
模板和参数包,但它给出了一个 class
,然后是一包。另一方面,它专门研究这两种类型的组合,这让我有点困惑。我想知道:
*_v
在这种情况下可变模板实用程序?最佳答案
让我们比较一下变量的模板参数...
template <template <class...> class Template, class... Args>
constexpr bool is_specialization_v = is_specialization<Template<Args...>, Template>::value;
论点
is_specialization_v<std::vector<int>, std::vector>
您声明它首先接受一个模板,然后传递一个类型。然后您声明它接受类型包,但现在您传递一个模板。问题在于您感到困惑并像对主要特征进行专门化一样实现变量。它不接受参数作为参数传递以放置在特化中。它需要接受与主节点相同的参数,然后转发它们:
template <class T, template <class...> class Template>
constexpr bool is_specialization_v = is_specialization<T, Template>::value;
关于c++ - Type_traits *_v 变量模板实用程序顺序编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027884/
看过this answer ,我尝试为其中的代码提供一个变量模板实用程序: template class Template> struct is_specialization : std::fals
我试图从下面的 URL 中理解下面的宏: do { \ wor
template<> class CalcHashClass { public: CalcHashClass(const char* v) { _v = new char[st
这确实是重复的 question但是没有答案。 问题是,当我通过 post 请求用 mongoose 保存一条新记录时,保存的所有内容都是这样的: { "_id" : ObjectId("5d1159
我找遍了,没有解决方案。这是我插入数据的方式: string value = db.StringGet("test"); string cleaned = value.Replace("u'", "'
我正在使用 MongoDB 作为我的 Web 应用程序的数据库。我正在寻找一种无需为其创建任何类型化类即可插入和检索动态 JSON 数据的方法。 我的网络应用程序发送一个 JSON 字符串。然后在后端
我正在使用以下代码在 angular4 中测试一个简单的递归 Treeview 组件。但是每当我尝试在 toggle() 上扩展 subview 时。 我遇到异常错误: ERROR TypeError
我们可以使用多种方法来隐藏该字段,例如: let schema = new Schema({ },{versionKey: false}); 但是我想知道隐藏这个字段的结果和效果。 最佳答案 看看mo
下面的代码总是返回下面的有线对象 {"_U": 0, "_V": 0, "_W": null, "_X": null} 作为回应。 这是我的代码 getData = () => {
我是一名优秀的程序员,十分优秀!