小编ACy*_*lic的帖子

`void_t`是如何工作的?

我观看了Walter Brown在Cppcon14上关于现代模板编程(第一部分,第二部分)的演讲,他在演讲中展示了他的void_tSFINAE技术.

示例:
给定一个简单的变量模板,该模板计算void所有模板参数是否格式正确:

template< class ... > using void_t = void;
Run Code Online (Sandbox Code Playgroud)

以及检查是否存在名为member的成员变量的以下特征:

template< class , class = void >
struct has_member : std::false_type
{ };

// specialized as has_member< T , void > or discarded (sfinae)
template< class T >
struct has_member< T , void_t< decltype( T::member ) > > : std::true_type
{ };
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么以及如何运作.因此一个小例子:

class A {
public:
    int member;
};

class B {
};

static_assert( has_member< A …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++14

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

如何在scala中的泛型方法中创建特征实例?

我正在尝试使用此方法创建特征实例

val inst = new Object with MyTrait
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想把这个创作转移到生成器函数,即.

object Creator {
  def create[T] : T = new Object with T
}
Run Code Online (Sandbox Code Playgroud)

我显然需要清单以某种方式修复类型擦除问题,但在此之前,我遇到了两个问题:

  1. 即使有一个隐含的清单,Scala仍然要求T是一个特征.如何添加限制来创建[T]以使T成为特征?

  2. 如果我选择使用Class.newInstance方法动态创建实例而不是使用"new",我如何在"new object with T"中指定"with"?是否可以在运行时动态创建新的具体mixin类型?

scala instance traits new-operator

8
推荐指数
2
解决办法
6764
查看次数

Scala Case类匹配编译错误和别名内部类型?

如何使用与别名类型匹配的案例类?当我从容器中取出CB等时,这就有效.

class DoStuff[TKey](
  val c : Container[TKey]#CB
)
{
  type CB = Container[TKey]#CB
  type C1 = Container[TKey]#C1
  type C2 = Container[TKey]#C2

  c match {
    case C1(e1) => e1  //   - not found: value e1   - not found: value C1
    case C2(e2) => e2 //    - not found: value e2   - not found: value C2
  }
}

trait Container[TKey]
{
    abstract trait CB
    case class C1(val e : AnyRef) extends CB
    case class C2(val e : AnyRef) extends CB
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

types scala match

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

"g ++ -MMD"比包括扫描更好吗?

在查看构建系统时,很多(SCons,bjam,cmake,Tundra等)都有内置的#include扫描程序.然而,gcc和icc提供了一个-MMD(或-MD)选项,它输出C++文件所依赖的头文件的名称.

-MMD依赖的选择似乎是可靠的.如果添加#include到C文件,其时间戳将更改,以便构建系统重新编译它.如果#include向头文件添加a ,则其时间戳将更改,并且将重新编译所有受影响的C文件.

包括扫描系统中断,但-MMD在我看来是健壮的.哪个最好,为什么?

dependencies gcc include icc

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

是否存在与Scala的地图或C#的Select函数相当的lua?

我正在寻找一种在Lua桌上进行地图/选择的好方法.

例如.我有一张桌子:

myTable = {
  pig = farmyard.pig,
  cow = farmyard.bigCow,
  sheep = farmyard.whiteSheep,
}
Run Code Online (Sandbox Code Playgroud)

如何编写myTable.map(function(f)f.getName)?[假设所有农场动物都有名字]

即.将该函数应用于表中的所有元素.

lua select map

3
推荐指数
1
解决办法
2617
查看次数

标签 统计

scala ×2

c++ ×1

c++14 ×1

dependencies ×1

gcc ×1

icc ×1

include ×1

instance ×1

lua ×1

map ×1

match ×1

new-operator ×1

select ×1

sfinae ×1

templates ×1

traits ×1

types ×1