标签: generic-programming

为什么“重载解决方案”偏向于不受约束的模板功能而不是更具体的模板功能?

我有一个带有乘法的最小表达模板库,即

template <typename T, typename U>
struct mul {
    const T &v1;
    const U &v2;
};

template <typename T, typename U>
mul<T, U> operator*(const T &one, const U &two) {
    std::cout << " called: mul<T, U> operator*(const T &one, const T &two)\n";
    return mul<T, U>{one, two};
}
Run Code Online (Sandbox Code Playgroud)

并转置,即

template <typename T>
struct transpose {
    const T &t;
};

template <typename T>
transpose<T> tran(const T &one) {
    return transpose<T>{one};
}
Run Code Online (Sandbox Code Playgroud)

我将介绍一些type AB,其中后者是前者的子类:

template <typename T>
struct A { …
Run Code Online (Sandbox Code Playgroud)

c++ generic-programming sfinae expression-templates

14
推荐指数
1
解决办法
183
查看次数

通用/模板编程最佳实践:限制类型,或不限制类型

这是我的问题.我只是好奇在限制可以传递给泛型函数或类的类型方面的共识.我以为我曾经读过,如果你正在进行通用编程,通常最好先把东西打开而不是试图关闭它们(不记得来源).

我正在编写一个具有一些内部泛型函数的库,我觉得它们应该只允许库中的类型与它们一起使用,因为这就是我的意思.另一方面,我不确定我将锁定事情的努力值得.

任何人都可能有一些关于这个主题的统计数据或权威评论?我也对合理的意见感兴趣.希望这并不能完全解决这个问题:

此外,SO上是否有任何标签等同于"最佳实践"?我没有特别看到那个,但似乎能够提出给定SO主题的所有最佳实践信息是有帮助的......也许不是,只是一个想法.

编辑:到目前为止,一个答案提到我正在做的库的类型将是重要的.它是一个数据库库,最终使用STL容器,variadics(元组),Boost Fusion,这种性质的东西.我可以看到这是如何相关的,但我也会对确定走哪条路的经验法则感兴趣.

c++ templates boost generic-programming c++11

13
推荐指数
1
解决办法
2077
查看次数

如何在C#中减去两个通用对象(T-T)(例如:DateTime - DateTime)?

我写了一个通用类:

public class Interval<T> where T : IComparable // for checking that Start < End 
{
    public T Start { get; set; }
    public T End { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我使用这个类与DateTime,int等.

我需要一个Duration属性,返回一个持续时间,如:

public object Duration
{
    get
    {
        return End - Start;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我的类中包含此属性时,编译器会在运算符上引发逻辑错误-.

我能做些什么来正常实现这个目标,还是应该忽略它?

c# generics properties generic-programming

13
推荐指数
2
解决办法
5848
查看次数

Scala的数据类型通用编程库

我正在寻找一个允许数据类型泛型编程的Scala库(例如Scrap Your Boilerplate).具有适当链接和每个简短描述的库列表将是一个完美的答案.

functional-programming scala generic-programming

12
推荐指数
1
解决办法
766
查看次数

你觉得过度概括是什么意思?

花了一些时间在Haskell和其他函数式语言中玩,我开始意识到设计的简单性来源于描述一般问题.虽然模板编程的许多方面可能远非简单,但有些用法很常见,我认为它们不会妨碍清晰度(尤其是函数模板).我发现模板通常可以简化当前设计,同时自动添加一些未来阻力.为什么他们的功能应该降级为图书馆作家?

另一方面,有些人似乎避免像瘟疫这样的模板.十年前,当泛型类型的概念对于大多数编程社区而言是陌生的时候,我能理解这一点.但是现在所有流行的静态类型OO语言都支持这种或那种形式的泛型.增加的熟悉程度似乎需要调整保守态度.

我最近向我表达了一种这样的保守态度:

你永远不应该做出比必要更通用的东西 - 软件开发的基本规则.

我真的很惊讶地看到这种说法如此夸张,好像应该是不言自明的.就个人而言,我发现它远非不言自明,对于像Haskell这样的语言,除非你另有说明,否则一切都是通用的.话虽如此,我想我明白这种观点来自哪里.

在我的脑海里,我确实有类似的规则在喋喋不休.现在它处于最前沿,我意识到我总是根据整体架构来解释它.例如,如果您有一个类,则不希望使用您可能有一天使用的大量功能加载它.如果你只需要一个具体的版本,就不要费心去做接口(虽然可模拟性可能是对这个版本的反驳).像这样的东西...

然而,我不做的是在微观层面上应用这一原则.如果我有一个小实用程序函数,没有理由依赖任何特定类型,我将创建一个模板.

所以你觉得怎么样?您认为过度概括是什么?根据具体情况,此规则是否具有不同的适用性?你甚至同意这是一个规则吗?

c++ templates generic-programming

12
推荐指数
4
解决办法
2021
查看次数

通用对类

只是尝试这个问题,我在过去的考试试卷中发现,这样我就可以为即将进行的Java考试做准备.

提供用于表示事物对的通用类Pair.该类应该提供一个构造函数,一个获取该对的第一个成员的方法,一个获取该对的第二个成员的方法,一个用于设置该对的第一个成员的方法,一个用于设置该对的第二个成员的方法.该类应该针对第一个成员的两个类型进行参数化,并且对于该对的第二个成员进行参数化.

这是这个问题的正确实现吗?

public class Pair<firstThing, secondThing>{
   private firstThing first;//first member of pair
   private secondThing second;//second member of pair

   public Pair(firstThing first, secondThing second){
     this.first = first;
     this.second = second;
   }

   public void setFirst(firstThing first){
    this.first = first;
   }

   public void setSecond(secondThing second) {
     this.second = second;
   }

   public thing getFirst() {
     return this.first;
   }

   public thing getSecond() {
     return this.second;
   }
}
Run Code Online (Sandbox Code Playgroud)

java generics generic-programming

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

在Java中实例化map <String,List <String >>的方法

我想Map<String, List<String>>在Java中实例化,

我试过了

Map<String, List<String>> foo = new <String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

Map<String, List<String>> foo = new <String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

他们都没有工作.有没有人知道如何在Java中实例化这个地图?

java list map generic-programming

12
推荐指数
3
解决办法
5万
查看次数

如何用两个输入编写泛型函数?

我是编程方面的新手,我遇到了R与泛型函数有关的问题:有多个输入时如何编写?

举一个简单的例子,关于数据集和函数

z <- c(2,3,4,5,8)
calc.simp <- function(a,x){a*x+8}
# Test the function:
calc.simp(x=z,a=3)
[1] 14 17 20 23 32
Run Code Online (Sandbox Code Playgroud)

现在,我更改z的类:class(z)<-'simp'因为有两个输入,我应该如何编写泛型函数'calc'?我的尝试和错误如下:

calc <- function(x) UseMethod('calc',x)
calc(x=z)
Error in calc.simp(x = z) : argument "a" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

calc <- function(x,y) UseMethod('calc',x,y)
Error in UseMethod("calc", x, y) : unused argument (y)
Run Code Online (Sandbox Code Playgroud)

因为我只是一个初学者,所以我的困惑可能是根本的困惑。请帮忙!非常感谢你!

r generic-programming

12
推荐指数
1
解决办法
144
查看次数

用f#报废你的锅炉

我已经在Haskell编程语言中使用了Scrap Your Boilerplate和Uniplate库,我会发现通过有区别的联合的泛型编程形式非常有用.f#编程语言中是否有等效的库?

f# boilerplate generic-programming discriminated-union

11
推荐指数
1
解决办法
1141
查看次数

将自定义视图添加到XML ...但使用GENERIC类型

我正在开发一个自定义视图,希望可重用.它应该具有泛型类型,如下所示:

public class CustomViewFlipper<someType> extends ViewFlipper { }
Run Code Online (Sandbox Code Playgroud)

我知道如何将普通的自定义视图绑定到XML文件.但我找不到这种情况的任何例子.有没有办法为XML中的类定义泛型类型?

xml android generic-programming type-parameter

11
推荐指数
2
解决办法
4722
查看次数