模板化类中的Is_foo结构
is_foo struct inside a templated class
我有一个foo
结构模板上的size_t
。我想写一个is_foo
结构体,当且仅当T
对于某些N
看起来像foo<N>
时,is_foo<T>::value
为真。以下是我的问题的一个最小示例:
template<typename T>
class Bar {
public:
template<size_t N> struct foo{};
template<typename> struct is_foo : std::false_type{};
template<size_t N> struct is_foo<foo<N>> : std::true_type{};
template<typename = std::enable_if<is_foo<foo<0>>::value>::type>
Bar(int x) {}
};
我的问题是main
中的Bar<double> b(5);
无法编译,这意味着is_foo<foo<0>>::value
原来是false
。然而,如果我从class Bar
的声明中删除template<typename T>
,那么Bar b(5)
将编译良好。我怎样才能使is_foo
表现出我想要的方式?
我的问题是
Bar<double> b(5);
在main中编译失败,这意味着is_foo<foo<0>>::value
原来是false
没有。
+ g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp
main.cpp:10:25: error: need 'typename' before 'std::enable_if<Bar<T>::is_foo<Bar<T>::foo<0ul> >::value>::type' because 'std::enable_if<Bar<T>::is_foo<Bar<T>::foo<0ul> >::value>' is a dependent scope
template<typename = std::enable_if<is_foo<foo<0>>::value>::type>
^
[snip]
+ clang++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp
main.cpp:10:25: error: missing 'typename' prior to dependent type name 'std::enable_if<is_foo<foo<0> >::value>::type'
template<typename = std::enable_if<is_foo<foo<0>>::value>::type>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typename
相关文章:
- Why is UINT32_MAX + 1 = 0?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Is !NaN not a NaN?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- Directx 11 - CompileFromFile() is not compiling
- Centos7 g++ "to_string is not in a member of std"
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- Where is std::hardware_destructive_interference_size?
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- What is unordered_set in C++
- 反转C++ foo(MyClass &) vs foo(const MyClass &)
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- CMake 错误 - 目标 foo INTERFACE_SOURCES属性包含在源目录中以前缀为前缀的路径
- Is int & foo();一个左值?
- Is there any reason for using if(1 || !Foo())?
- What is an `int foo::*bar::*`?
- C++。无法调用成员函数。错误 : "foo is private"