New*_*ine 5 c++ class-template template-argument-deduction c++20
我有一个继承基类模板的构造函数的类模板。(对于c++20)有没有办法从基类的构造函数参数推导出派生类的模板参数?
如果我明确指定类型,那就有效。或者,如果我重新实现构造函数并调用基类的构造函数,这也可以工作,但是有没有办法做到这一点?
template<typename T>
struct CTestBase
{
using Type = T;
CTestBase() = default;
CTestBase(T t){}
};
template<typename T>
struct CTestDer : public CTestBase<T>
{
using CTestBase<T>::CTestBase;
};
void test()
{
//CTestDer der(int{}); //ERROR
CTestDer<int> der(int{}); //OK
}
Run Code Online (Sandbox Code Playgroud)
您可以添加用户自定义的扣费指南:
#include <utility>
template<typename T>
struct CTestBase
{
using Type = T;
CTestBase() = default;
CTestBase(T t){}
};
template<typename T>
struct CTestDer : public CTestBase<T>
{
using CTestBase<T>::CTestBase;
};
template<typename T>
CTestDer(T &&t) -> CTestDer<std::remove_cvref_t<T>>;
void test()
{
CTestDer der(int{}); // OK now.
}
Run Code Online (Sandbox Code Playgroud)
通过多一点工作,应该可以:
decltype它自己的演绎指南来构造超类这应该可以处理任何事情。但这将需要大量工作。对于这个简单的用例,如果预计超类不会发生太大变化,那么这就有点矫枉过正了。
但有没有办法不这样做呢?
是的,只需添加用户定义的扣除指南CTestDer:
template<typename T>
CTestDer(T) -> CTestDer<T>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |