C++ 模板类型';s在实例化时的构造函数参数
我想同时使用P1和P2作为A的模板参数。。目前,我正在将P1/P2的一个实例提供给A的ctor,其中使用复制ctor初始化't' 更大的图景(对于UncleBens,GMan): 我有很多数据结构(DS),里面有很多恶魔。这些DS中的每一个都存储在一个数据库中,显示在ui中,并通过RPC进行事务处理。我有一个类来验证每个DS。验证类的行为应该根据验证的情况而有所不同。当从数据库获取的数据验证失败时,它应该记录一个“开发者可以理解”的错误,并以断言结束。当验证从rpc客户端获取的数据失败时,服务器应响应适当的错误。当验证从rpc服务器获取的数据失败时,应记录该数据,并且客户端应崩溃。当UI验证失败时,应通知用户 我决定将“错误处理”作为一种策略,可以在编译时选择它作为模板参数。然而,每个错误处理机制都需要不同的构造方法。这就是我被困的地方 到目前为止,我有一个基于复制构造函数的机制,其中我两次提到类型(一次作为模板的参数,另一次作为实例提到实例化的ctor),这是多余的 我想知道其他人会如何解决这种情况。C++ 模板类型';s在实例化时的构造函数参数,c++,templates,C++,Templates,我想同时使用P1和P2作为A的模板参数。。目前,我正在将P1/P2的一个实例提供给A的ctor,其中使用复制ctor初始化't' 更大的图景(对于UncleBens,GMan): 我有很多数据结构(DS),里面有很多恶魔。这些DS中的每一个都存储在一个数据库中,显示在ui中,并通过RPC进行事务处理。我有一个类来验证每个DS。验证类的行为应该根据验证的情况而有所不同。当从数据库获取的数据验证失败时,它应该记录一个“开发者可以理解”的错误,并以断言结束。当验证从rpc客户端获取的数据失败时,服务器
template
class P1
{
public:
P1 (int i, int a) {}
};
class P2
{
public:
P2 (int a) {}
};
甲级
{
公众:
T;
无效Do(无效)
{
t、 doSomething();
}
A():t(参数){};//像这样
}
回答编辑后的问题:如果模板类的参数数量可变,则需要等待C++0x varadic模板。billy:在模板实例化时。。我想我应该更新我的问题,提到这一点。@Joe Steeve:你已经成为这个班的一员了。当类被构造时,t被构造。如果你想在函数被调用时构造t,就让t成为函数的一个成员并在那里构造它。@billy:我在“a”中有很多函数。A使用“T”中的函数。T基本上定义了一个策略。@Joe Steeve:那么你需要让它们成为模板函数,而不是模板类。C++有一个原因是免费的。这是一个。@billy:如中所述,使用varadic模板收集A的构造函数中的参数并将其传递给“t”的构造函数?在C++03中,不能这样做。我已经更新了我的答案。@Joe你目前的做法有什么问题吗?@neil:模板实例化看起来有点难看。喜欢ax(P2(1));你希望它看起来怎么样?每当人们被你的意图和诸如此类的东西弄糊涂的时候,最好给我们一个更大的图景。告诉我们你想做什么,而不是你认为应该怎么做。47分钟+1。请注意,A中T模板的参数数量必须是已知的。@vlad:你能举个简单的例子吗?@Joe:在C++0x中,你可以有
template
和A():T(i…)
。然而,这是一个奇怪的答案。对于一点语法上的甜言蜜语来说,每个a都是不同的类型并不重要。@vlad:ctor的参数并不总是“int”。@UncleBens:OP要求的是:在模板实例化时提供构造函数参数,而不是对象构造!
template <typename T>
class A
{
public:
T t;
void Do (void)
{
t.doSomething();
}
A() : t(parameters) {}; //Like this
}
template <typename T>
class A
{
public:
T t;
void Do (void)
{
t.doSomething();
}
A() : t(parameters) {}; //Like this
}
template <typename T, int i, int a>
class A
{
public:
T t;
A() : t(i, a)
{
}
void Do (void)
{
t.doSomething();
}
}
A<MyT, 5, 8> a;
template <typename T, typename ARG1, ARG VAL1>
class A
{
T t;
public:
A() : t(VAL1)
{
}
};