【发布时间】:2016-06-03 02:30:45
【问题描述】:
假设我有一个概率类,它有一个计算数组平均值的方法。因为这个方法可能会传递一个浮点数、双精度数、整数等数组,所以我认为将这个方法设为模板方法是合适的。
但是在传递数组时,我必须定义数组的类型和数组的长度。所以我的问题是:如何配置模板以接受两个输入?我参考了网络,但没有看到一个很好的例子。
- 定义模板以接受整数、浮点数等参数是否有效?
我已经在下面发布了我的代码
概率标题
#ifndef COFFEEDEVMATH_PROBABILITY_H
#define COFFEEDEVMATH_PROBABILITY_H
class Probability
{
public:
Probability(void);
template <typename T, int N>
void ExpectedValueDataSet(const std::array<T, N>& data)
{
T test = data[0]; // This is irrelevant, but simply a place holder example.
}
protected:
private:
};
#endif // COFFEEDEVMATH_PROBABILITY_H
主要
#include <iostream>
#include <Probability.h>
int main()
{
float hoor[] = {3, 3, 1, 1};
Probability prob;
prob.ExpectedValueDataSet(hoor, 4);
}
【问题讨论】:
-
应该是整个类,而不是一个方法。
-
对于初学者来说,
int不是std::array的第二个模板参数,所以不能推导出来。类型为size_t。 -
为什么?我觉得拥有一个可以对您扔给它的不同类型数据进行操作的单个“概率对象”会更合适。我试图在 C++ 中做的事情不合法吗?
-
为什么不使用
std::vector或std::array而不是C 样式的数组?那么你不必担心传递长度,它们是容器的一部分。 -
@Teague 如果您想要一个不包含任何状态的概率对象(没有成员变量,只是一组具有相关目的的函数),您可以将所有函数设为静态并且从不实例化该对象而是将其命名空间用作对所有内容进行分组的逻辑方式。
标签: c++ arrays templates c++11