【发布时间】:2012-01-09 03:40:04
【问题描述】:
我有几个小类,它们都是彼此在同一个文件中声明和定义的对等类。很多这些类共享信息。目前,共享信息的类型是硬编码的,用于初始开发和测试目的,但我想对类进行模板化(动词形式?)。但是,如果我在每个类之前编写 template 构造,则用户可能会创建具有不同类型参数的每个类的实例,这很可能会导致数据或代码中的错误。有没有办法强制使用相同类型创建所有类实例?
我能想到的唯一方法是创建一个额外的init 或spawner 类,其中包含createInstanceOfA()、createInstanceOfB() 等成员函数,用户必须首先创建一个实例spawner 具有所需类型的类,然后使用其成员函数创建其他类的实例。当然,这意味着我的spawner 类必须与我拥有的任何实用程序类保持同步(这应该不是问题)。但是,有没有更好的方法呢?
编辑:例如,我的“丑陋解决方案”(一个简单的案例):
template <typename T>
struct A {
void manipulate( T arg );
};
template <typename T>
struct B {
void manipulate( T arg );
};
template <typename T>
struct C {
void manipulate( T arg );
};
template <typename T>
struct Spawner {
A<T> createInstanceOfA( void );
B<T> createInstanceOfB( void );
C<T> createInstanceOfC( void );
};
int main() {
// don't allow
A<int> a;
B<float> b;
C<double> c;
// allow
Spawner<int> s;
A<int> s.createInstanceOfA(); // not sure if syntax is correct
B<int> s.createInstanceOfB();
C<int> s.createInstanceOfC();
return 0;
}
【问题讨论】:
-
如果代码不是通用的,为什么还要模板?这种设计听起来很丑。
-
如果模板化类是错误的,为什么要模板化它
-
@CatPlusPlus 并重新运行:允许共享数据为任何类型,只要它们都是相同的类型。我同意我的“解决方案”听起来很难看。我希望有人有更好的主意。
-
@LowTechGeek:这对我来说听起来像是一次错误的尝试。对于任何模板 X 和任何类型 T1、T2、X
和 X 都是完全不同且不相关的类型。如果它们不提供转换,那么你不能不小心混合它们,因为这将是编译错误。