模板参数C <void()=“”>和C <void(*)()=“”> </void> </void>的区别

时间:2013-04-25 10:10:03

标签: c++ c++03

我不明白模板参数之间的区别

template <class T>
class C
{
   T t;
};

void foo()
{
   C<void ()> c1; //isn't compiled
   C<void (*)()> c2;
}

void()的类型是什么?这种类型用于boost :: function ..

3 个答案:

答案 0 :(得分:6)

void()是一种函数类型。 void(*)()是指针类型。在C ++中,您不能拥有函数类型的变量,因此当T t;Tvoid()不会编译。

答案 1 :(得分:1)

通过

C<void ()> c1;
C<void (*)()> c2;

编译器希望您将指针传递给函数签名。第一个不是指针。

答案 2 :(得分:1)

第一个void()是一个函数,而第二个void(*)()是一个指向函数的指针。