有没有办法在类中存储模板或自动变量而不使类成为模板?我正在尝试存储指向其中一个STL随机数生成器的指针,但是如果不将整个类放入模板中,我无法想出任何方法。这不是一个选项,因为将cpp中的所有内容移动到h文件会导致大量的循环头文件包含我不想处理的内容。所以例如它会是这样的:
class tSomeClass
{
public:
template<typename RNG>
tSomeClass(RNG * rng) : fRNG(rng) { }
private:
RNG * fRNG; // How do I get this working???
};
到目前为止,我提出的所有内容总是需要将整个课程作为模板,所以我很难过。
编辑:我知道我忘了提一些东西。我不能使用继承来指定RNG类型,因为我不知道基数是什么,除非有人知道STL使用的RNG的基类是什么。目前我正在使用std :: default_random_engine。答案 0 :(得分:5)
如果您真的不想要模板,我可以考虑两个选项:
void *
。这不是非常类型安全的,并且该类的用户必须确切地知道它实际上用它做什么类型。IRandom *
。这似乎更有用/可用。答案 1 :(得分:0)
安全且正确的方法是定义一个描述接口的类,并在实际实现中继承它。
示例:
class RNG {
public:
virtual int get(void) = 0;
}
答案 2 :(得分:0)
C方式是使用通用指针(void*
),但是因为这是C ++只是利用继承和动态绑定,即:
class RNG /* random number generator interface/base class */
{
public:
virtual int randomize(void) = 0;
};
class RandomA : public RNG /* one implementation of a random num generator */
{
public:
int randomize() { return 4; }
};
class RandomB : public RNG /* another implementation of a random num generator */
{
public:
int randomize() { return 0; }
};
class tSomeClass
{
public:
tSomeClass(RNG * rng) : fRNG(rng) { }
private:
RNG * fRNG;
};
...
RandomA randomObj;
tSomeClass t(&randomObj);
如果你的所有随机数生成器都是由<。p>组成的,那么甚至函数指针都可以