0
template <class Target>
struct unwrap_predicate<void (Target)>
{
    typedef is_convertible<mpl::_, Target> type;
};

这是整个程序的Boost库中的一段代码,请参见: http: //www.boost.org/doc/libs/release/boost/parameter/preprocessor.hpp

我不明白目标。Class 旁边的第一个 Target。这是一个类型参数。第二个 void(Target) 对我来说看起来像非类型参数。参数如何充当类型和非类型。我对这两行感到困惑。任何人都可以帮忙吗?

4

2 回答 2

5

第二个 void(Target) 对我来说看起来像非类型参数。

它不是,Target只是这里类型的一部分——返回 void 的函数类型。

您所拥有的是任何接受一个参数并返回的函数类型的部分模板特化void

例子:

template <typename T>
struct unwrap { static const int i = 0; };

template<typename T>
struct unwrap<void(T)> { static const int i = 1; };

void foo(int&);

int main()
{
    unwrap<int> u1;
    unwrap<decltype(foo)> u2;
    std::cout << u1.i << u2.i; // prints 01
}
于 2013-08-05T18:47:57.143 回答
1

它是一种函数类型。

void (Target)

是返回 void (即什么都没有)并采用 type 的单个参数的函数的类型Target

于 2013-08-05T18:45:15.467 回答