- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想定义一个通用函数,其参数和返回类型是模板的相同实例。这导致了过于冗长的定义。有没有一种方法可以在不污染封闭 namespace 的情况下使用速记?
例子,
template<class CoordinateType, class ValueType>
struct PointWithValue {
CoordinateType x, y;
ValueType value;
}
template<class CoordinateType, class ValueType>
PointWithValue<CoordinateType, ValueType> interpolate(
PointWithValue<CoordinateType, ValueType> point1,
PointWithValue<CoordinateType, ValueType> point2)
{
...
}
我能想到的一个解决方案是
template<class PointWithValueType>
PointWithValueType interpolate(
PointWithValueType point1, PointWithValueType point2)
但我对此并不满意,因为它混淆了我对 PointWithValueType
的期望;它仅隐式显示在主体函数中。而且,如果调用者传递了错误的参数,则错误不太可能清晰明了。
我想要这样的东西
template<class CoordinateType, class ValueType>
using PointWithValueType = PointWithValue<CoordinateType, ValueType>;
PointWithValueType interpolate(
PointWithValueType point1, PointWithValueType point2)
据我所知,只有当我将它包装在一个类中并将该方法定义为 static
时,以上内容才有效。它有点工作,但它也改变了接口(interface)(将函数放在更深的命名范围内)并且它依赖于一个没有成员且只有一个静态函数的类,这感觉很尴尬并且可能会让用户感到困惑。
这是一个一般性问题,不适用于此类问题的特定问题的解决方法不是合适的答案。是否有类似于我的 using
示例但没有缺点的东西?
最佳答案
有了 traits 和 SFINAE,你可能会做
template <typename T>
struct IsPointWithValue : std::false_type {};
template <class CoordinateType, class ValueType>
struct IsPointWithValue<PointWithValue<CoordinateType, ValueType>> : std::true_type
{
// Possibly aliases to retrieve template parameters.
};
template<class T, std::enable_if_t<IsPointWithValue<T>::value, int> = 0>
T interpolate(T point1, T point2);
关于c++ - 避免模板化类型的过度重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659775/
我正在开发适用于 Wordpress 的 PSD,并面临着根据颜色过度对齐背景图像或相反的问题。 在桌面上一切都很好,但在移动设备上背景图像变小了(我使用了 background-size: 100%
在标准 Modelica 流体流量源中,通常指定流量或压力。例如,以下边界设置(P 表示压力边界,F 表示流量边界)通常会围绕管道组件: P - 管道 - P F - 管道 - P 但是,有时在同一侧
我正处于设计基于 Azure 的应用程序的早期阶段。考虑到我可能预期的需求的变化性,Azure 吸引我的地方之一是它的可扩展性。因此,我试图保持事物松散耦合,以便我可以在需要时添加实例。 我看到的关于
我与 Xcode 4 dot notation code sense problem 正好相反!点符号的代码完成不仅显示属性,还显示我的方法(在每个完成的左侧标记 P 或 M 分别指示它是属性还是方法
我是一名优秀的程序员,十分优秀!