实际上我用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) 我在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) 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次,但我不能这样做.请建议任何解决方案.
我使用下面的代码来查找反射中的类成员是原始的和一些对象,我的问题是有一种方法来识别字段是类型原始,对象,类引用因为我想根据类型调用特定的方法.例如,如果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) 有三种不同的实现方式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
我想编写一些适用于不同类型的程序.我打算使用这里和这里描述的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) 我有一个像这样的基本协议:
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个问题基于此.
我想使用Layout变量来检索此类启动的nib名称.因此,如果我要将此类作为以下内容启动:let myView = BasicSwiftClass<NormalLayout>我希望能够为类中的NormalLayout检索nibName("NormalLayoutNibName").我会想做类似的事情,let myNib = Layout.nibName但它只是告诉我Instance member nibName cannot be used on type Layout所以如何去检索nibName?
当我没有将泛型类添加到我的课程中时它只是public class BasicSwiftClass,那classForCoder就是MyProject.BasicSwiftClass.现在我已经添加了通用行为,classForCoder正在返回,MyProject.BasicSwiftClass<Layout.NormalLayout>因为在调用时不再返回正确的包let bundle = …
有没有办法转换对象以返回方法的通用值?我试过这种方式但发生了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)
有办法吗?
每天,我们都会收到来自不同供应商的不同格式(CSV,XML,自定义)的巨大文件,需要将其上传到数据库中进行进一步处理。
问题在于这些供应商将发送其数据的完整转储,而不仅仅是更新。在某些应用程序中,我们仅需要发送更新(即,仅更改记录)。当前,我们要做的是将数据加载到临时表中,然后将其与以前的数据进行比较。由于数据集非常庞大,这非常痛苦,而且我们有时会缺少SLA。
有更快的方法解决此问题吗?任何建议或帮助,不胜感激。我们的程序员用尽了所有的想法。
考虑下面的示例:
template <typename T>
class SomeClass {
// rest of the definition ...
SomeClass<T>& function1() {
// ...
return *this;
}
SomeClass& function2() {
// ...
return *this;
}
}
Run Code Online (Sandbox Code Playgroud)
上面两个函数的返回值之间有区别吗?如果不是,应该选择哪一个?