我正在使用双端队列,因此我可以为我的数据生成滚动平均值和差异.我将n和n ^ 2作为一对存储在双端队列中,然后使用累积与我自己的运算符+().
#include <deque>
#include <numeric>
#include <utility>
template <typename T1, typename T2>
std::pair<T1,T2> operator+(const std::pair<T1,T2>& lhs, const std::pair<T1,T2>& rhs)
{
return std::pair<T1,T2>(lhs.first + rhs.first, lhs.second + rhs.second);
}
namespace resource
{
template <typename T>
class rollingStats
{
public:
rollingStats(unsigned int n, const T& val):
xs(n, std::pair<T,T>(val, val*val))
{;}
~rollingStats()
{;}
T getMean(void) const
{
std::pair<T,T> sum = std::accumulate(xs.begin(), xs.end(), std::pair<T,T>((T)0,(T)0));
return sum.first / xs.size();
}
T getVar(void) const
{
const unsigned int n = xs.size();
std::pair<T,T> sum = …Run Code Online (Sandbox Code Playgroud) 我想在我的代码中执行一组类似的测试,但仅根据参数进行更改.
我可以用switch语句写这个:
bool doTest(EnumSensorFamily family, const StructSensorProposal& proposed)
{
switch (family)
{
case FAM1:
return (ExpectedFam1 == proposed.Fam1SensorId);
break;
case FAM2:
return (ExpectedFam2 == proposed.Fam2SensorId);
break;
case FAM3:
return (ExpectedFam3 == proposed.Fam3SensorId);
break;
default:
ERROR ("Unexpected family");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我想用模板特化来做这件事
template <EnumSensorFamily family>
bool doTest(const StructSensorProposal& proposed);
template<>
bool doTest<FAM1> (const StructSensorProposal& proposed)
{
return (ExpectedFam1 == proposed.Fam1SensorId);
}
template<>
bool doTest<FAM2> (const StructSensorProposal& proposed)
{
return (ExpectedFam2 == proposed.Fam2SensorId);
}
template<>
bool doTest<FAM3> (const StructSensorProposal& proposed)
{ …Run Code Online (Sandbox Code Playgroud) 有没有办法重载一个强制转换操作符来转换两个枚举?
在我的代码中我有
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
Run Code Online (Sandbox Code Playgroud)
其中NOT_OPERATING和INITIALISING映射到UNAVAILABLE; DEGRADED和NORMAL直接映射.这些由外部接口修复.
我正在寻找一种转换方式devStatus,dataStatus并希望能够写出类似的东西:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
Run Code Online (Sandbox Code Playgroud)
我知道,如果这些是课程,我可以写devStatus::operator dataStatus()这样做.有没有办法为枚举这样做?
我可以有一个免费的功能
dataStatus devStatus2dataStatus(const devStatus& desSts)
有没有办法固定矢量的大小,仍然改变内容?
我试过制作一个const向量,const std::vector<int> vec(10);但这阻止我改变值.
vec[3] = 3; 给出编译器错误:分配只读位置.
我还尝试使用const引用非const向量
std::vector<int> vec(10);
const std::vector<int>& vecref(vec);
Run Code Online (Sandbox Code Playgroud)
这给出了相同的编译器错误.
我希望能够在声明或初始化阶段之后修复矢量大小.我可以使用旧式阵列,但我希望能够使用矢量算法.
如果这有任何区别,我正在使用g ++.
是否可以防止在代码中的某些点使用new?
我正在开发的遗留代码要求在引导程序完成后没有动态内存分配.我们现在想测试一下.
如果我从头开始开发,那么我可以编写自己的包装器并使用它,或者在公共基类中重载operator new.
有没有办法重载全局新的然后调用它?
在一个声明中编写引用声明和赋值是否有任何问题.我已经尝试使用gcc,它似乎工作.
int x = 10;
cout << "x = " << x << "\n";
int &y = x = 11;
cout << "x = " << x << "\n";
cout << "y = " << y << "\n";
Run Code Online (Sandbox Code Playgroud)
给了我预期的输出
x = 10
x = 11
y = 11
Run Code Online (Sandbox Code Playgroud)
这是否适用于大多数编译器或是否存在可移植性问题?
我已经实现了一个简单的统计引擎,使用deque返回滚动均值和方差,以提供数据队列.
deque由许多条目构成,这些条目等于滚动值的数量.
当新值到达时,最前面的值会弹出前面,而新值会被推到后面.
我需要确保这不会在内存中增长,因为它预计会在很长一段时间内作为后台任务运行.
deque是否在使用中的堆上分配?有没有可用于修复尺寸的标志?
我在RHEL 5.3上使用G ++ 4.1.2
我正在使用一个单例类,其中一个线程调用单例.在审查期间我被问到为什么我使用this指针而不是单例实例.
我的代码与建议的更改.
class myClass : public threadWrapper
{
public:
static myClass& instance()
{
static myClass instance;
return instance;
}
// This is the callback that I have implemented
static void callback(void *me)
{
if (me != NULL)
static_cast<myClass*>(me)->doCallback();
}
// This is the suggested callback
static void callback2(void *me)
{
instance().doCallback();
}
// caller gets instance and then calls initialise()
int initialise()
{
if (initialised)
return ERROR_ALREADY_INITIALISED;
// Initialise the class
// my thread startup call
// thread wrapper class …Run Code Online (Sandbox Code Playgroud)