我已经使用模板作为参数类型,但我遇到了这个问题,我不确定我是否理解正在发生的事情或者曾经读过的事情。
template<char *name, int iteration, bool high>
void test( short step )
{
if(high)
iteration++;
change(name,iteration);
}
template void test<"John", 5, true>( short );
编辑:如果(bool)显然是错误的,那就用正确的东西取而代之。
答案 0 :(得分:2)
什么都没发生。模板刚刚被声明,然后显式实例化。它没有被召唤。
事实上,我怀疑它是否会编译。我认为if (bool)
不是一个有效的表达。
它无法编译的另一个原因是字符串文字不能是模板参数。我真的希望它可能是因为它在我使用过的很多元编程结构中非常有用。为了将char *传递给模板,您必须执行此操作:
extern char * param = "whatever";
expects_char_param<param>();
即使这个函数DID工作,编译,并且bool
被high
替换为正文,这将是一种令人难以置信的愚蠢方式。要弄清楚它做了什么,只需假装参数是变量,就像它们应该的那样,并遍历代码。如果你还是不明白......不知道该告诉你什么。
答案 1 :(得分:2)
这个代码无法编译。首先,您不能通过模板传递字符串文字。第二,if (bool)
?
你不理解它的原因是因为它是无法编译的废话。
答案 2 :(得分:1)
该模板完全被破坏了。首先,正如Noah Roberts已经提到的,if(bool)
甚至不会编译。另一方面,iteration
是模板参数,这意味着它必须是编译时常量,因此iteration++;
也不会编译。