Pan*_*apa 1 c++ type-traits enable-if c++17
我有2个文件:
摘要.hpp
template <typename T, typename = std::enable_if_t<std::is_base_of_v<DigestCreator, T>>>
class DigestHolder {
public:
DigestHolder();
};
#include "digest.ipp" // Included here.
Run Code Online (Sandbox Code Playgroud)
摘要.ipp
template <typename T, std::enable_if_t<std::is_base_of_v<DigestCreator, T>>>
DigestHolder<T>::DigestHolder()
{};
Run Code Online (Sandbox Code Playgroud)
该类在hpp文件中声明并在ipp文件中定义。该ipp文件包含在文件末尾hpp。
但是,我收到编译错误:
error: nested name specifier 'DigestHolder<T>::' for declaration does not refer into a class, class template or class template partial specialization
DigestHolder<T>::DigestHolder()
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题吗?
我尝试修改hpp模板声明如下,但没有好的结果:
尝试1:
template<typename T, std::enable_if_t<std::is_base_of_v<DigestCreator, T>, std::nullptr_t> = nullptr>
class DigestHolder {};
Run Code Online (Sandbox Code Playgroud)
尝试2:
template<typename T, std::enable_if_t<std::is_base_of_v<DigestCreator, T>, bool> = true>
class DigestHolder {};
Run Code Online (Sandbox Code Playgroud)
该模板有两个参数,即使您为其中之一提供了默认值。
您需要命名第二个参数以便在定义中引用它,并且不应提供另一个默认参数:
template <typename T, typename U>
DigestHolder<T, U>::DigestHolder() {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |