gpt4 book ai didi

模板参数的 C++ 部分类型推断 - 这可能吗?

转载 作者:行者123 更新时间:2023-11-30 02:44:51 24 4
gpt4 key购买 nike

我有这样的嵌套结构:

struct A
{
struct B
{};
};

我有一些模板代码需要知道 OUTER 类型(在本例中为“A”)。所以我正在尝试编写一个可以推断外部类型的模板函数,它看起来像这样:

template<typename T>
void func(typename T::B item)
{}

int main()
{
A::B item;
func(item); // Error here because "candidate template ignored: couldn't infer template argument 'T'"
return 0;
}

编译不通过,原因在上面的注释中给出。


现在,我当然可以将模板简化为这样的东西,但正如您在下面看到的那样,它不满足我了解“外部”类型(即 A)的要求。

template<typename T>
void func(typename T item)
{
// Oops, I now have the complete type of A::B but I have a
// specialized function that needs the A without the B as the type parameter
someOtherFunc<???>(...); // The ??? needs to be type A only, without the B
}

最佳答案

您可以将 typedef A outerType; 添加到您的类 B。
那么 func 的实现可能是:

#include <iostream>

struct A{
struct B {
typedef A outerType;
};
};

template <class T>
void func( T f)
{
typedef typename T::outerType outerType;
outerType a;
someotherfunc(a);
}

int main ()
{
A::B item;
func(item);

return 0;
}

当然,您拥有的每个内部类都应该将其外部类型命名为 outerType,以使 func 计算出外部类型。

关于模板参数的 C++ 部分类型推断 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061270/

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