问题标签 [default-template-argument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
80 浏览

c++ - 指针类型的特殊重载

考虑以下代码段:

此代码生成编译错误:

为什么编译器T=double, U=double在第 22 行派生?我认为它只应该通过如果T是指针类型。

0 投票
1 回答
30 浏览

c++ - 声明一个默认的模板函数

假设我有以下内容:

如何foobar在 Bar.hpp 上声明函数?

0 投票
1 回答
61 浏览

c++ - 以模板类为字段的非模板类,不指定模板参数

有没有办法拥有这样的模板类

并且有另一个类可以同时接受A<true>A<false>作为参数或字段,而不是模板类本身。像这样:

或者这根本不可能,因为具有不同模板参数的同一类的两个对象被编译器视为不同的类型?关于如何设计它的其他建议也将不胜感激。我知道如果我只是将模板参数设为类字段,这种设计是可能的,但我想知道这是否可以使用模板参数来完成。

0 投票
0 回答
74 浏览

c++ - 具有递归和 std::enable_if 的模板特化

假设我想通过以下方式序列化以下数据。有些数据是 memcopy 可序列化的,有些则不是。

前面提到的类型是这样定义的:

如您所见,这两种结构类型的唯一区别是 IsMemcopySerializable::value 中的值。

请注意,对于所有 T,IsMemcopySerializablestd::vector<T>::value 为 false。

我们通过以下方式定义 FastBinarySerializer:

问题是以下行会生成此错误:

问题是 std::vector 不是 MemcopySerializable。FastBinarySerializer 类模板匹配两个特化。有没有办法让 FastBinarySerializerstd::vector<NonMemCpySerializable> 仅与 std::vector 专业化匹配?我尝试使用 DefaultType 和 NonDefaultType 来强制 std::vector 专业化被优先考虑无济于事。

我的约束:FastBinarySerializer 必须保留为类模板,而不是函数模板。SerializeValue 必须始终具有相同的函数签名。我无法在类模板实例化中手动指定 DefaultType 或 NonDefault 类型。

0 投票
1 回答
71 浏览

c++ - 模板默认参数

如何将模板类指定为模板类型名的默认值?例如以下不起作用。

0 投票
1 回答
51 浏览

c++ - 当参数的类型是模板类型时,如何提供默认参数参数?

例如,如果我使用这样的类:

我怎样才能做到这一点?

0 投票
1 回答
39 浏览

c++ - 默认模板参数和参数包

在经典的递归模板特化中,我需要在类定义中多次使用一种类型,例如用于继承和使用语句,也可能在其他地方。

例子:

如您所见,我需要多次编写std::conditional_t< sizeof...(REST), C<REST...>, Empty >表达式。

问题是,我不能使用

失败,因为 C++ 不允许在特化中使用默认模板参数

也不

失败,因为我不能在参数包后面使用默认模板参数。即使允许这样做,C 类还没有定义,因为这C<REST...>也会失败。

有什么技巧可以避免多次定义std::conditional_t< sizeof...(REST), C<REST...>, Empty >语句吗?