【发布时间】:2012-01-25 17:53:00
【问题描述】:
我正在使用以下编译时“技巧”(基于 ADL)来创建一个仅由同一命名空间中的类有效/定义/可调用的函数。
namespace Family1
{
struct ModelA{};
struct ModelB{};
template<typename T>
bool is_in_Family1(T const& t)
{
return true;
}
};
namespace Family2
{
struct ModelC{};
template<typename T>
bool is_in_Family2(T const& t)
{
return true;
}
};
Family1::ModelA mA;
Family2::ModelC mC;
is_in_Family1(mA); // VALID
is_in_Family1(mC); // ERROR
现在,我想使用这个原则(或类似的东西)来为属于每个命名空间的类生成一个专门化的 Foo::Bar(如下),例如Family1。
// I would like to specialize the method template Bar for classes in Family1
// namespace; and another specialization for classes in Family2 namespace
struct Foo
{
template<typename T>
void Bar( T& _T ){}
};
为了便于维护和每个命名空间中的大量类,如果可能,我想在不命名命名空间中的所有类的情况下执行此检查。
【问题讨论】:
-
为什么
Foo是一个模板类,它的构造函数也是一个不同类型的模板?Foo<float> myvar('4');?您只是想拥有一个template<typename T>吗?因为没有使用外部的。如果Foo只是一个函数,我认为这可以做到,但我认为它不能用于结构。或者至少,不是很好。