gpt4 book ai didi

c++ - 将成员模板 typedef 与 using 别名会使编译器认为它不是类模板

转载 作者:行者123 更新时间:2023-11-28 04:35:42 25 4
gpt4 key购买 nike

最终我需要过滤一个类型列表(brigand::list - 在 brigand 元编程库中定义)。但要开始:

我有一个包含类型列表的设置类:

   template<typename TComponentList>
class Settings {

// this is an integral_constant holding bool
template<typename TList, typename T>
using ContainsFilter = brigand::found<TList, std::is_same<T, brigand::_1>>;

// is the type present in component list?
template<typename T>
using IsComponentFilter = ContainsFilter<TComponentList, T>;
}

brigand 库提供了一个filter“函数”,但要在那里传递我的过滤器,我需要使用brigand::bind 将其包装起来。这是一个例子:

using ls = brigand::list<TagA, SignatureA, ComponentB>;

// binds the template parameter - passes it to my filter
using wrapped = brigand::bind<TestSettings::IsComponentFilter, brigand::_1>;

// a list holding only ComponentB
using filtered = brigand::filter<ls, wrapped>;

我无法克服的最后一步是根据模板参数将过滤放在类中:

   template <class TSettings>
struct FilteringClass
{
// problem line
using wrapped = brigand::bind<TSettings::IsComponentFilter, brigand::_1>;

// template<typename TSignature>
// using SignatureComponents = brigand::filter<TSignature, wrapped>;
};

当编译问题行时,我首先得到一个错误,我需要在 TSettings 之前使用 typename 关键字:

to refer to a type member of a template parameter, use 'typename TSettings:: 

这听起来正是我想要的! 我想是否需要明确告诉编译器将 TSettings 视为一种类型?但是,当我添加它时,我从 brigand 的 绑定(bind)函数中得到了这个错误:

error: type/value mismatch at argument 1 in template parameter list for 'template<template<class ...> class<template-parameter-1-1>, class ...> struct brigand::bind'
using wrapped = brigand::bind<TSettings, brigand::_1>;
note: expected a class template, got '(TSettings:: IsComponentFilter < <expression error>)'

最佳答案

所以,我找到了我遗漏的东西,尽管几乎是随机的要正确添加另一个别名,我需要添加 ::template,就像这样:

template<typename T>
using wrapped = brigand::bind<typename TSettings::template IsComponentFilter, brigand::_1>;

我想如果没有它,原始别名被模板化的事实会以某种方式丢失给编译器。

关键字的含义在 this answer 中有很好的解释。 .

关于c++ - 将成员模板 typedef 与 using 别名会使编译器认为它不是类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com