c++ - 将模板名称作为类参数传递会导致在可变参数扩展中使用时出错 - 我是否发现了 MSVC 编译器错误?
问题描述
(首先,如果我对术语的使用不正确/标准,我深表歉意,我希望这足以了解要点......欢迎指点修复标题/措辞!)
目标概述
该类将为template-name
列表中的每种类型专门继承。
执行
无效的 C++ 代码基本上如下(我在 GCC 下的下一个片段中使其有效)
/// NOTE: The example is not complete... just to abbreviate the Godbolt example
template<typename Type>
struct TemplateName
{};
template<typename TemplateName, typename... Types>
class HandleAllTypeImpl<TemplateName, std::tuple<Types...> >
: public TemplateName<Datas>...
{};
为了使其有效,TemplateName
必须是完整类型,所以我制作了一个虚拟容器类型,然后可以TemplateName::Impl
用来访问和实例化模板化成员
/// NOTE: The example is not complete... just to abbreviate the Godbolt example
struct TemplateName
{
template<typename Type>
struct Impl
{};
}
template<typename TemplateName, typename... Types>
class HandleAllTypeImpl<TemplateName, std::tuple<Types...> >
: public TemplateName::Impl<Datas>...
{};
完整示例 - 在 GCC 下工作,在 MSVC 下失败
https://godbolt.org/z/898hE8MhY
报告 MSVC 错误
TemplateName::Impl<Datas>
使用as时报错
error C2143: syntax error: missing ',' before '<'
解决方案
推荐阅读
- javascript - 从localStorage获取时如何检查空/未定义的字符串值
- sql - 查询以显示值的名称而不是一个表中的 ID
- c - linux kernel 4.12中wake_up_interruptible()的正确用法是什么?
- c - 如何使用 getchar 监控用户输入
- build - 如何启用 DRAFT API for zeromq/cppzmq 以使用 vcpkg 在 Windows 上构建?
- core-data - 将已删除的 CKRecord 与 CoreData NSManagedObject 协调一致
- matlab - 如何避免用于矩阵所有排列相乘的for循环?
- flutter - 如何在颤动中为 ClipOval 添加阴影?
- python - 使用 Python Beautiful Soup 是否可以搜索 html id 的前几个字符?
- reactjs - 组件状态改变后如何重新渲染 DOM?