小编toh*_*ava的帖子

为什么C++中的类型别名在语法中使用'using'而不是'typedef'?

显然,类型别名和模板化类型别名在语义上等同于typedef,并且是typedef的扩展,以支持模板.为什么using为这些创建了关键字的新语法,而不是使用typedef作为第一个和一些语法扩展的单词typedef.

注意:这不是"使用和typedef之间的区别"问题的克隆.我知道这样可以using定义一个typedefs 族.我要问的是,为什么标准人员决定使用此using关键字而不是typedef关键字.这似乎只会增加语言的混乱.

c++ templates typedef using c++11

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

有人可以在C++中向我解释一个复杂的函数指针类型

谁能告诉我这个函数的参数类型是什么f

int f(void (*(int,long))(int,long)) {}
Run Code Online (Sandbox Code Playgroud)

在尝试编译一些可变参数模板重代码(我自己的包装器std::thread)时,我得到了类似的类型...

c++ types function-pointers

22
推荐指数
3
解决办法
1910
查看次数

C++:为什么numeric_limits适用于它不知道的类型?

我创建了自己的类型,没有任何比较器,没有专业化std::numeric_limits.尽管如此,由于某种原因,std::numeric_limits<MyType>编译好.为什么c ++标准委员会定义numeric_limits模板,使其对所有类型都有效,包括非数字类型?

示例代码如下:

#include <iostream>
#include <limits>
using namespace std;

// This is an int wrapper that defaults to 666 instead of 0
class A {
public:
    int x;
public:
    A() : x(666) {}
};

int main() {
    A a = std::numeric_limits<A>::max();
    A b = std::numeric_limits<A>::max();

    std::cout << a.x << "\n" << b.x;
    // your code goes here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits numeric-limits c++11

17
推荐指数
1
解决办法
1532
查看次数

Haskell:获取数据构造函数名称作为字符串

让我们说我们有

data D = X Int | Y Int Int | Z String
Run Code Online (Sandbox Code Playgroud)

我希望有一个功能 getDConst

getDConst :: D -> String
Run Code Online (Sandbox Code Playgroud)

根据用于输入的数据构造函数返回"X","Y"或"Z".是否有一种通用的方法来编写它而不必case对每个数据构造函数进行编写?(我可以使用依赖于Data.Typeable类似的解决方案)

reflection haskell generic-programming ghc deriving

15
推荐指数
2
解决办法
2090
查看次数

haskell Data.HList的简单用法示例

我在哪里可以找到Data.HList的简单使用示例?从我在维基中读到的内容来看,这个工具对于异构列表来说是一个"更好"的解决方案,而不是存在类型,我不明白为什么.

generics polymorphism haskell types heterogeneous

10
推荐指数
1
解决办法
1478
查看次数

动态大小的不可调整大小的数组

是否有一个C++类型,就像一个"动态大小不可调整大小的数组"?这种类型可以被认为是两件事之一:

  • vector<T>但没有resize,push_back等等.
  • array<T,N>但哪里N是动态的而不是静态的.

我不想要一个只有在数组中的元素类型是不可复制类型时才有效的解决方案.我想要一个通用的解决方案

c++ arrays boost stl vector

10
推荐指数
1
解决办法
1034
查看次数

在Haskell中迭代所有对组合而不重复

在haskell中,给定一个元素列表,xs迭代重复所有对排列的最简单方法是:

[(x,y) | x <- xs, y <- xs]
Run Code Online (Sandbox Code Playgroud)

我希望能够做同样的事情,但仅限于组合.如果x和y具有可比性,我可以做到

[(x,y) | x <- xs, y <- xs, x > y]
Run Code Online (Sandbox Code Playgroud)

但我更喜欢一种更通用,更高效的解决方案(我知道,渐态复杂性将保持平方,但我们可以通过避免使用过滤条件来减少实际的运行时复杂性)

combinations haskell functional-programming tuples

8
推荐指数
1
解决办法
1392
查看次数

可识别C++的Diff实用程序

是否有一个免费的diff实用程序可以使用它们的AST而不是文本来比较两个C++文件?

我想到的是: - 将两个文件转换为AST - 将AST渲染为C++代码(这标准化缩进) - 在这两者之间做正常的差异 - 同时尝试检测已完成的简单重构(添加/删除/重命名)成员例如)

c++ diff g++ clang abstract-syntax-tree

7
推荐指数
2
解决办法
1031
查看次数

确保haskell类型A包含类型B的成员

我们来看看以下代码:

transformBi (++"asdasd") [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

显然,这段代码什么都不做,但它仍然编译得很好.我想创建一个新版本的transformBi,如果编译器可以通过类型证明它是无操作,则不会编译.理想情况下,这可以通过调用的类型类来完成Contains,这样新的类型transformBi就可以了

transformBi :: (Biplate from to, Contains from to) => (to -> to) -> from -> from
Run Code Online (Sandbox Code Playgroud)

我们如何实施Contains

我正在寻找一个Contains可以自动导出的东西,而不是我必须为每个代数数据类型编写的东西.

generics haskell typeclass strong-typing uniplate

7
推荐指数
1
解决办法
175
查看次数

为什么Haskell基础库中没有"非空列表"类型?

这种类型可能是

data NonEmptyList a = NEL a [a]
Run Code Online (Sandbox Code Playgroud)

功能head,tail和其他人将成为新创建的方法Listable类型的类.某些函数已经可以适合现有的类型类(maps/folds/traversals/monads).

为什么这样的类型不是Haskell标准库的一部分?

haskell types list strong-typing

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