考虑以下代码段:
namespace nr {
template <class ...> using void_t = void;
template <typename T, typename = void> struct type_id {
static int const value = 0;
};
template <typename T> struct type_id<T, void_t<decltype(T::type_id)>> {
static int const value = T::type_id;
};
}
现在我想让重载能够访问私有type_id
静态字段。我找不到正确的语法或者是否可能。我在下面的尝试提供0
而不是已执行的1
。如果您宣布1
成员公开,则会获得type_id = 1
。
class Foo {
template <typename T, typename> friend struct nr::type_id;
static const int type_id = 1;
};
int main() {
std::cout << nr::type_id<Foo>::value << std::endl;
}
这是可能的,如果是的话,怎么样?