标签: generic-programming

使用Typeable在运行时部分应用函数(任何时间类型匹配)

通用编程时间!

如果我有一个功能:

f :: a1 -> a2 -> a3 -> ... -> an
Run Code Online (Sandbox Code Playgroud)

和一个价值

v :: aX   -- where 1 <= x < n
Run Code Online (Sandbox Code Playgroud)

不知道在编译的时候,其中的参数fv是正确的类型(如果有的话),我可以部分地适用fv?(使用Typeable,Data,TH或任何其他技巧)

稍微坚定一点,我可以g在运行时构建函数(下面)吗?它实际上不必是多态的,我的所有类型都将是单态的!

g :: (a1 -> a2 -> a3 -> a4 -> a5) -> a3 -> (a1 -> a2 -> a4 -> a5)
g f v = \x y z -> f x y v z
Run Code Online (Sandbox Code Playgroud)

我知道,使用Typeable(typeRepArgs特别是),v是第三个参数f,但这并不意味着我有办法部分应用f.

我的代码可能看起来像: …

haskell generic-programming

6
推荐指数
1
解决办法
266
查看次数

是否可以指出用于泛型方法的类型应该是一个接口?

这是我的通用方法代码:

  public static IT Activate<IT>(string path)
  {
        //some code here....
  }
Run Code Online (Sandbox Code Playgroud)

我想设置通用IT必须只是一个接口.

这可能吗?

c# generics generic-programming

6
推荐指数
1
解决办法
88
查看次数

最大数<x?

在C++中,假设我有一些x类型T,可以是整数或浮点类型.我想找到数量最多y类型的T为其y < x持有.需要模板化解决方案以使用整数和浮点数透明地工作.您可以忽略边缘情况,其中x已经是可以在a中表示的最小数字T.

可能的使用案例:这个问题被标记为过于本地化,因此我想提供一个我认为更通用的用例.请注意,我不是OP的原作者.

考虑这个结构:

struct lower_bound {
    lower_bound(double value, bool open) : value(open? value+0.1 : value) {}
    double value;
    bool operator()(double x) { return x >= value; }
};
Run Code Online (Sandbox Code Playgroud)

此类模拟下限,可以打开或关闭.当然,在真实(双关语)生活中,我们不能这样做.流动是不可能的(或至少相当棘手)来计算S是所有实数.

在此输入图像描述

但是,当S是一组浮点数时,这是一个非常有效的原则,因为我们基本上处理的是一个可数集; 然后没有开放或封闭的界限.也就是说,> =可以按照类似于lower_bound类的方式定义.

为了简化代码,我使用+0.1来模拟一个开放的下界.当然,0.1是原始值,因为可能存在值z,使得值<z <=值+ 0.1或值+ 0.1 = =浮点表示中的值.因此@ brett-hale答案非常有用:)

您可以考虑另一个更简单的解决方案:

struct lower_bound {
    lower_bound(double value, bool open) : open(open), value(value) {}
    bool open;
    double value;
    bool operator()(double x) { …
Run Code Online (Sandbox Code Playgroud)

c++ math templates stl generic-programming

6
推荐指数
1
解决办法
232
查看次数

如何根据其父类检查类型?

简单的情况,int 确实是一个数字。

我正在创建一个泛型 class test<T>

我想测试 T 以查看它是否继承自 number (或在 Dart 的情况下为 num )。

基于Object > num > int文档中的对象, 所以起初我想: T is num如果Tint. 测试int is num显示错误。我必须使用另一个关键字而不是is确定它是否是特定类的子类。

我试图将它设置为如果 T 是 num 的子级,它将处理比较不同于如果它们是字符串。

对我来说,这可以追溯到is-ahas-a关系的多态继承设计。

generics generic-programming dart

6
推荐指数
1
解决办法
1733
查看次数

Swift仿制药推迟了问题

我正在努力做到这一点,但我遇到了一些麻烦

这是CustomProtocol

protocol CustomProtocol {

}
Run Code Online (Sandbox Code Playgroud)

SubCustomProtocol

protocol SubCustomProtocol: CustomProtocol {

}
Run Code Online (Sandbox Code Playgroud)

SubCustomProtocolImplementation

class SubCustomProtocolImplementation: SubCustomProtocol {

}
Run Code Online (Sandbox Code Playgroud)

这是CustomClass

class CustomClass<P: CustomProtocol> {

    var customProtocol: P?

    func doSomething() {

    } 

}
Run Code Online (Sandbox Code Playgroud)

SubCustomClass

class SubCustomClass<P: SubCustomProtocol>: CustomSubClass {

}
Run Code Online (Sandbox Code Playgroud)

和我的BaseViewController

class BaseViewController<P: CustomProtocol, T: CustomClass<P>>: UIViewController {

    var foo: T!

    override func viewDidLoad() {
        super.viewDidLoad()
        foo?.doSomething()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ViewController

class ViewController<P: SubCustomProtocolImplementation, T: SubCustomClass<P>>: BaseViewController<P,T> {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
Run Code Online (Sandbox Code Playgroud)

在我称之为foo?.doSomething()的行中,它说'T'不是'CustomClass <'P'>'的子类型,我不知道我做错了什么

在ViewController声明中,它说"BaseViewController要求T继承自CustomClass <'P'>"

希望你能帮我!

generics protocols generic-programming swift

6
推荐指数
1
解决办法
55
查看次数

有没有办法递归地展平元组?

在 Rust 中,有没有办法使用traits 和impls 来(递归地)展平元组?

如果有帮助的话,可以使用 N 个嵌套对的东西是一个好的开始

trait FlattenTuple {
    fn into_flattened(self) -> /* ??? */
}

// such that
assert_eq!((1, (2, 3)).into_flattened(), (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

如果可以扩展任何类型的嵌套元组的工作,那就更好了:

assert_eq!(((1, 2), 2, (3, (4, 5))).into_flattened(), (1, 2, 2, 3, 4, 5))
Run Code Online (Sandbox Code Playgroud)

tuples generic-programming rust

6
推荐指数
1
解决办法
2957
查看次数

在泛型类型上调用 Enum.values()

目标是实现一个通用的 Enum 翻译器。我知道Enum1Enum2具有相同的值和相同的顺序。

目标是实现这样的东西:(这有效)

private static Enum1 translateEnum(Enum2 originalEnum) {
    return Enum1.values()[originalEnum.ordinal()];
}
Run Code Online (Sandbox Code Playgroud)

但是我有几个枚举,所以我想制作一个通用方法:(这不起作用)

private static < T extends Enum<T>,G extends Enum<G>> T translateEnum(G originalEnum) {
    return T.values()[originalEnum.ordinal()];        
}
Run Code Online (Sandbox Code Playgroud)

我的问题是在T.values()编译器告诉我:

方法 values() 对于类型 T 是未定义的

你们知道我如何解决这个问题,或者你对我的问题有什么其他想法吗?

java enums generic-programming

6
推荐指数
1
解决办法
2255
查看次数

功能的多重定义在同一个地方

我试图通过为一个matrix类型提供一些预处理器定义来模拟C中的泛型.以下是摘录:

#define __matrix_struct(TYPE) \
  struct { \
    uint32_t sz; \
    TYPE **ptr; \
  }

#define __matrix_t(TYPE) matrix_ ## TYPE
#define __matrix_ptr_t(TYPE) __matrix_t(TYPE) *

#define __matrix_typedef(TYPE) typedef __matrix_struct(TYPE) __matrix_t(TYPE)

#define __matrix_allocator_name(TYPE) TYPE ## _matrix_alloc
#define __matrix_allocator(TYPE) \
  __matrix_ptr_t(TYPE) __matrix_allocator_name(TYPE) (uint32_t sz) { \
    uint32_t i; \
    __matrix_ptr_t(TYPE) m = (__matrix_ptr_t(TYPE)) malloc(sizeof(__matrix_t(TYPE))); \
    m->ptr = (TYPE **) malloc(sz * sizeof(TYPE *)); \
    for (i = 0; i < sz; ++i) { \
      m->ptr[i] = (TYPE *) calloc(sz, sizeof(TYPE)); \
    } …
Run Code Online (Sandbox Code Playgroud)

c c99 generic-programming

6
推荐指数
1
解决办法
126
查看次数

使用 Spring Boot Data JPA 按需创建表

我正在尝试创建一个 Spring Boot 应用程序,我想在其中按需创建和使用数据库表,而无需为它们定义实体/存储库。

我有一个基本的 Business 实体和 BusinessType 实体来保留业务类型。我希望能够为具有自己的表的业务类型(比如 Coffeeshop)动态创建一个表(同时我可以在 BusinessType 表上保留表的名称并决定从那里查询哪个表)。

因此,如果不为 Coffeeshop 定义实体和/或创建 CrudRepository,我可以创建一个名为 Coffeeshop 的表,然后对其进行一些查询吗?

如果没有,我的选择是什么?在典型的 Spring Data JPA 应用程序中,您如何处理拥有基类型并允许系统具有更多具体类型(持久化并与基类型关联)的情况?

谢谢

java ddl generic-programming spring-data-jpa spring-boot

6
推荐指数
1
解决办法
708
查看次数

需要有关 Java 中通配符泛型类型的帮助

我正在学习 Java 中的通用编程。我在 Core Java(第 9 版)中看到了这些图表:

?  扩展 T

?  超级T

而且我在Java编程入门综合版第十版中看到了这些图表:

书中的图

但我认为应该是这样的:

我的图

有人能告诉我我是否正确吗?

java generic-programming

6
推荐指数
1
解决办法
80
查看次数