标签: generic-programming

模板问题('typename'不是模板函数参数)

实际上我用intel编译器编译一些库时遇到了问题.

使用g ++正确编译了相同的库.

问题是由模板引起的.我想要理解的是 **typename**函数体内的模板函数参数和变量声明的声明

例:

void func(typename sometype){..
...
typename some_other_type;
..
}
Run Code Online (Sandbox Code Playgroud)

编译这种代码产生以下错误(英特尔),(gcc没有声称):我有以下错误

../../../libs/log/src/attribute_set.cpp(415): error: no operator "!=" matches these operands
            operand types are: boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'> != boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'>
      while (begin != end)
                   ^
          detected during instantiation of "void boost::log_st::basic_attribute_set<CharT>::erase(boost::log_st::basic_attribute_set<CharT>::iter<'\000'>, boost::log_st::basic_attribute_set<CharT>::iter<'\000'>) [with CharT=wchar_t]" at line 438

../../../boost/log/attributes/attribute_set.hpp(115): error: no operator "!=" matches these operands
            operand types are: boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'> != boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'>
              if (it != m_pContainer->end())
Run Code Online (Sandbox Code Playgroud)

我想要理解的是在函数体内使用typename,参数声明.

例:

template< typename CharT >
struct basic_attribute_values_view< CharT >::implementation
{

public:
..
..
void …
Run Code Online (Sandbox Code Playgroud)

c++ boost generic-programming

4
推荐指数
2
解决办法
1994
查看次数

Java泛型类和通配符

我在java中遇到泛型类的问题.

我有这门课:

public abstract class MyMotherClass<C extends AbstractItem> 
{
    private C   item;

    public void setItem(C item)
    {
        this.item = item;
    }

    public C getItem()
    {
        return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个类的实现可以是:

public class MyChildClass extends MyMotherClass<ConcreteItem>
{

}
Run Code Online (Sandbox Code Playgroud)

ConcreteItem只是一个扩展AbstractItem(它是抽象的)的简单类.

所以MyChildClass有一个ConcreteItem,我可以使用:

MyChildClass child = new MyChildClass();
child.setItem(new ConcreteItem());

// automatic cast due to generic class
ConcreteItem item = child.getItem();
Run Code Online (Sandbox Code Playgroud)

好的,目前一切都很好.这是问题所在:

现在我想从集合中提取MyMotherClass的一个实例并设置它的项目(哪个类型未知):

Map<String, MyMotherClass> myCollection = new HashMap<String, MyMotherClass>();
Map<String, AbstractItem> myItems = new HashMap<String, AbstractItem>();

// fill the 2 collections
...


MyMotherClass …
Run Code Online (Sandbox Code Playgroud)

java generics wildcard generic-programming

4
推荐指数
1
解决办法
7875
查看次数

Delphi泛型中的多态性

type 
  TParent=class
    public
      member1:Integer;
  end;

  TChild=class(TParent)
  public
    member2:Integer;
  end;


  TGArray<T: TParent>=class
    public
      function test:T;
    end;

  implementation

  var g:TGArray<TChild>;

    function TGArray<T>.test:T;
    begin
      Result:=??.create; // <<<<  Problem !
    end;


  begin
    g := TGArray<TChild>.Create;
    g.test.member2 := 1234;
  end.
Run Code Online (Sandbox Code Playgroud)

g.test必须返回该类的实例.我尝试过多种方法:

1.  Result := Result.create; //Exception
2.  Result := TChildClass.Create; //Error
3.  type TGArray<T: class> = class; //and above 2. The same errors/exceptions.
Run Code Online (Sandbox Code Playgroud)

这样做的目的是创建一个通用的类数组.数组存储在泛型类中并返回实例,但是如何?

如果我完成这件事,我会缩短我的代码3次,但我不能这样做.请建议任何解决方案.

delphi generics delphi-2009 generic-programming delphi-2010

4
推荐指数
1
解决办法
658
查看次数

如果type是primitive或type是object,则检入反射

我使用下面的代码来查找反射中的类成员是原始的和一些对象,我的问题是有一种方法来识别字段是类型原始,对象,类引用因为我想根据类型调用特定的方法.例如,如果field是原始调用handlePrimitive,如果字段类型为其他类型引用(在下面的示例中为SalesOrderItemPK primaryKey;),则调用方法handleClassReferance等

只是理解我需要获取类并调用它并根据成员类型创建数据...

for (Object clsObj : listClsObj) {
        Field[] declaredFields = clsObj.getClass().getDeclaredFields();
        numOfEntries = 1;
        do {
            Object newInstance = clsObj.getClass().newInstance();

            for (Field field : declaredFields) {

                // Get member name & types

                Class<?> fieldType = field.getType();
                Type genericType = field.getGenericType();
                String fieldTypeName = fieldType.getName();
                String memberName = field.getName();


                if (genericType instanceof ParameterizedType) {
                    ParameterizedType pt = (ParameterizedType) genericType;
                    for (Type typeOfReferance : pt.getActualTypeArguments()) {

                        String classTypeName = typeOfReferance.toString();
                        String[] parts = classTypeName.split(" ");
                        memberReferance = parts[1];
Run Code Online (Sandbox Code Playgroud)

在这里,我想调用可以根据数据类型处理字段的特定方法

public …
Run Code Online (Sandbox Code Playgroud)

java reflection generic-programming primitive-types

4
推荐指数
1
解决办法
1万
查看次数

如何从AsyncTask扩展为通用基类?

有三种不同的实现方式AsyncTask:

public class DownloadTask extends AsyncTask<String, Integer, Boolean>
public class JsonParserTask extends AsyncTask<Object, Void, Boolean>
public class PostCommentTask extends AsyncTask<String, Void, HttpRequestResult>
Run Code Online (Sandbox Code Playgroud)

我希望他们扩展一个BaseAsyncTask我可以用于依赖注入的东西.AsyncTask看起来像这样的类签名:

public abstract class AsyncTask<Params, Progress, Result>
Run Code Online (Sandbox Code Playgroud)

如何AsyncTask在保持不同参数的同时进行扩展?

                               | DownloadTask
AsyncTask <-- BaseAsyncTask <--| JsonParserTask
                               | PostCommentTask
Run Code Online (Sandbox Code Playgroud)

java android abstract-class generic-programming android-asynctask

4
推荐指数
1
解决办法
1706
查看次数

如何在fortran 90/95中使用内部类型进行一些通用编程

我想编写一些适用于不同类型的程序.我打算使用这里这里描述的flibs中使用的"include"方法.我在这里给出一个简单的例子.

  ! -------------------------------------------------------------- ! 
  module data_type

  type ivalue
  integer :: v
  end type

  type rvalue
  real(8) :: v
  end type

  end module data_type
  ! -------------------------------------------------------------- ! 
  module imod

  use data_type, only: T => ivalue 

  include "template.f90"

  end module imod
  ! -------------------------------------------------------------- ! 
  module rmod

  use data_type, only: T => rvalue 

  include "template.f90"

  end module rmod
  ! -------------------------------------------------------------- ! 
  module mod

  use imod, only:
 &     ivalue => T,
 &     iprintme => printme

  use rmod, only:
 &     rvalue …
Run Code Online (Sandbox Code Playgroud)

fortran generic-programming fortran90 fortran95

4
推荐指数
1
解决办法
1245
查看次数

Swift协议的通用类

我有一个像这样的基本协议:

public protocol BasicSwiftClassLayout { var nibName: String { get } }

我的班级是这样的:

public class BasicSwiftClass<Layout: BasicSwiftClassLayout> {}

我已经定义了2个不同的结构,以便我可以用2个不同的笔尖启动这个类:

public struct NormalLayout: BasicSwiftClassLayout { public let nibName = "NormalLayoutNibName" }

public struct OtherLayout: BasicSwiftClassLayout { public let nibName = "OtherLayoutNibName }

我现在有2个问题基于此.

  1. 我想使用Layout变量来检索此类启动的nib名称.因此,如果我要将此类作为以下内容启动:let myView = BasicSwiftClass<NormalLayout>我希望能够为类中的NormalLayout检索nibName("NormalLayoutNibName").我会想做类似的事情,let myNib = Layout.nibName但它只是告诉我Instance member nibName cannot be used on type Layout所以如何去检索nibName?

  2. 当我没有将泛型类添加到我的课程中时它只是public class BasicSwiftClass,那classForCoder就是MyProject.BasicSwiftClass.现在我已经添加了通用行为,classForCoder正在返回,MyProject.BasicSwiftClass<Layout.NormalLayout>因为在调用时不再返回正确的包let bundle = …

generics protocols generic-programming swift

4
推荐指数
1
解决办法
435
查看次数

通过泛型投射

有没有办法转换对象以返回方法的通用值?我试过这种方式但发生了Casting异常:

public <S extends Super> S get(Class<S> clazz) {
    return (S) new Super();
}

public class Super {

}

public class Sub1 extends Super {

}

public class Sub2 extends Super {

}
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.ClassCastException: 
Cannot cast com.zarinak.app.model.Super to com.zarinak.app.model.Sub1
Run Code Online (Sandbox Code Playgroud)

有办法吗?

java generics android casting generic-programming

4
推荐指数
1
解决办法
85
查看次数

有效识别差异

每天,我们都会收到来自不同供应商的不同格式(CSV,XML,自定义)的巨大文件,需要将其上传到数据库中进行进一步处理。

问题在于这些供应商将发送其数据的完整转储,而不仅仅是更新。在某些应用程序中,我们仅需要发送更新(即,仅更改记录)。当前,我们要做的是将数据加载到临时表中,然后将其与以前的数据进行比较。由于数据集非常庞大,这非常痛苦,而且我们有时会缺少SLA。

有更快的方法解决此问题吗?任何建议或帮助,不胜感激。我们的程序员用尽了所有的想法。

sql database algorithm logic generic-programming

4
推荐指数
2
解决办法
56
查看次数

如果函数是在类主体内定义的,我是否需要在成员函数的返回类型中指定typename?

考虑下面的示例:

template <typename T>
class SomeClass {
    // rest of the definition ...

    SomeClass<T>& function1() {
        // ...
        return *this;
    }

    SomeClass& function2() {
        // ...
        return *this;
    }

}
Run Code Online (Sandbox Code Playgroud)

上面两个函数的返回值之间有区别吗?如果不是,应该选择哪一个?

c++ templates generic-programming injected-class-name

4
推荐指数
1
解决办法
74
查看次数