当前位置: 首页 > 知识库问答 >
问题:

如何声明一个类型是另一个对象的泛型的变量?

邹英光
2023-03-14

请考虑以下代码:

int main(){
  MyObject<int> obj;
  foo(obj);
}
template <typename T>
void foo(T& objct){
...
}

在foo中,objct的类型将是myobject
我想在foo()中创建一个变量,它的类型是objct的泛型,在本例中是int
有没有办法做到这一点?谢谢。

编辑不幸的是(我想)我无法重写签名,因为函数foo()是用不同类型的对象调用的,例如

int main(){
  MyObject<int> obj;
  MyDifferentObject<int> obj2;
  foo(obj);
  foo(obj2);
}

共有1个答案

长孙承嗣
2023-03-14

我想在foo()中创建一个变量,它的类型是objct的泛型,在本例中是int。有办法做到这一点吗?

如果可以更改函数签名,那么可以这样做:

template <typename T>
void foo(MyObject<T>& objct){
    T variable;

如果这不是一个选项,例如,如果您希望foo也允许其他模板(例如在您编辑的问题中),那么您可以定义一个类型特征:

template<class T>
struct fancy_type_trait
{
};

template<class T>
struct fancy_type_trait<MyObject<T>>
{
    using type = T;
};

template<class T>
struct fancy_type_trait<MyDifferentObject<T>>
{
    using type = T;
};

template <typename T>
void foo(T& objct){
   using V = fancy_type_trait<T>::type;
   V variable;
 类似资料:
  • 在编写对象时,有没有方法键入对象的属性?与预先定义类型/接口相反。 我唯一能想到的是,但这太宽松了。考虑一下: 我想要<code>myData。myComment</code>抛出相同的错误。 这当然是一个微不足道的例子。但是如果我正在写一个大的复杂的对象,能够动态地声明它的部分类型会很好。

  • 请问其中interface{ *int }是什么语法,看不懂为什么要这么声明

  • “绑定不匹配:Team类型不是league类型 的有界参数 >的有效替代品。”

  • 我有一个泛型类型K,我想验证K是否实现了接口可比性。这是我的代码: 但是代码不起作用。我不想将所有K限制为实现可比性。我已经有了另一个TreeMapVector相似度类。如果K实现了接口可比性,我将使用TreeMapVector相似度类返回结果。 你认为我如何能解决这个问题?谢了。

  • rank ▲ ✰ vote url 68 354 80 465 url 查看一个对象的类型 有什么方便的方法查看一个对象的类型? 为了获得对象的类型,可以用内建函数type().把对象作为唯一的参数传递将会返回这个对象的类型: >>> type([]) is list True >>> type({}) is dict True >>> type('') is str True >>> type(

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。