小编Dr_*_*Sam的帖子

如何从模板类中键入方法的返回类型?

我有一个模板化的类Helper,看起来像这样:

template< typename Mapper >
class Helper
{
public:

   using mappedType = ... ;

};
Run Code Online (Sandbox Code Playgroud)

我需要mappedType是类中map(const int&)方法返回的Mapper类型.给出Mapper类似以下的有效类型:

class DMapper
{
public:

    double map(const int& val){ ... }
};
Run Code Online (Sandbox Code Playgroud)

Helper<DMapper>::mappedType应该是double.有没有办法在没有实例化的情况下做到这一点Mapper

我得到的最接近的是:

using mappedType = typename std::result_of<
    decltype(&Mapper::map)(Mapper const*, const int&)
>::type;
Run Code Online (Sandbox Code Playgroud)

type在这种情况下没有定义.

编辑:

如果我可以避免使用伪参数int,那就更好了(在我的具体代码中,参数并不那么简单).

c++ types return-type-deduction c++14

18
推荐指数
3
解决办法
1924
查看次数

为什么在转换子链接功能之前执行了帖子链接功能?

AngularJS中(前/后)链接函数的时序在文档中有明确定义

预连接功能

在子元素链接之前执行.由于编译器链接功能无法找到正确的链接元素,因此进行DOM转换是不安全的.

后连接功能

链接子元素后执行.在链接后功能中进行DOM转换是安全的.

这篇博客文章清楚地说明了这个预期的顺序.

但是当使用ng-transclude和嵌套指令时,这个顺序似乎不适用.

这是一个直观元素的例子(参见Plunkr)

<!-- index.html -->
<dropright>
  <col1-item name="a">
    <col2-item>1</col2-item>
    <col2-item>2</col2-item>
  </col1-item>
  <col1-item name="b">
    ...
  </col1-item>
</dropright>

// dropright-template.html
<div id="col1-el" ng-transclude></div>
<div id="col2-el">
  <!-- Only angularJS will put elements in there -->
</div>

// col1-item-template.html
<p ng-transclude></p>

// col2-item-template.html
<div ng-transclude></div>
Run Code Online (Sandbox Code Playgroud)

吊坠看起来像

dropright

当调用其链接和控制器函数时,指令在控制台中写入日志.它通常显示:

预期

但有时(几次刷新后),订单不符合预期:

有时候会发生

dropright post-link函数在其子项的post-link函数之前执行.

这可能是因为,在我的特殊情况下,我在儿童指令中调用了直接控制器(参见Plunkr)

angular.module('someApp', [])

.directive('dropright', function() {
    return {
        restrict: 'E',
        transclude: 'true',
        controller: function($scope, $element, $attrs) { …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive

15
推荐指数
1
解决办法
3459
查看次数

双重调度和模板类

我有一个C++代码,我比较了从一个普通的母类派生的不同类Foo.如果两个类的类型不同,则总是进行比较false.否则,它会比较某些特定于该类的内部数据.

我的代码看起来像这样:

class Bar;
class Baz;

class Foo
{
public:
    virtual bool isSame( Foo* ) = 0;
    virtual bool isSameSpecific( Bar* ){ return false; }
    virtual bool isSameSpecific( Baz* ){ return false; }
};

class Bar : public Foo
{
public:
    bool isSame( Foo* foo){ return foo->isSameSpecific(this); }
    bool isSameSpecific( Bar* bar){ return bar->identifier == identifier; }

    int identifier;
};

// and the same for Baz...
Run Code Online (Sandbox Code Playgroud)

这个伟大的工程(我认为这是一个双重分派),我可以比较Bar,并Baz只用指针Foo.

但现在出现了问题.我必须添加一个模板类:

template< typename …
Run Code Online (Sandbox Code Playgroud)

c++ templates double-dispatch

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