小编ext*_*spy的帖子

变量模板转换为std :: function <R(ARGS ...)>与GCC而不是MSVC2013一起使用,为什么?

如果这是重复,我会道歉.我在搜索中找不到任何东西.

我可以使用任何最新的功能c ++ 11/c ++ 14.如有必要,我可以升级到VS2015.

我正在尝试编写一个类,它将在分配时自动转换为具有特定签名的std :: function.我有与GCC一起使用的代码,但它在MSVC2013上失败了.代码是重新创建错误的代码段.WTF MSVC?!

另外我知道这是有风险的代码,自动转换函数指针等,但它是私有的插件库实现,我只想定义一次函数签名.

如果有另一种方法可以编写在main()中完成相同功能的代码并且同时适用于这两种方法,那么我就听见了.

GCC c ++ 11工作正常 - 演示

#include <functional>
#include <string>
#include <iostream>

class FunctionPointer
{
    void* fp;
public:
    FunctionPointer(void* ptr)
        : fp(ptr)
    {}

    // Overload casting operator to 
    // a certain function signiture
    template<class R, class... ARGS>
    operator std::function<R(ARGS...)>(){
        typedef R(*func_ptr)(ARGS...);
        return std::function<R(ARGS...)>((func_ptr)fp);
    }
};

void hello(std::string msg){
    std::cout << "Hello " << msg << std::endl;
}

int main() {

    FunctionPointer f((void*)hello);

    std::function<void(std::string)> func_hello = f;

    func_hello("World!");

    return …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11 c++14

22
推荐指数
1
解决办法
580
查看次数

是否可以从模板参数中提取数组大小?

如果这是重复我道歉.我环顾四周,发现了类似的问题,但没有完全像这样.

如果我像这样实例化模板......

MyClass<int[10]> c;
Run Code Online (Sandbox Code Playgroud)

如何编写模板以访问类型和数组大小?我已经尝试了我能想到的一切,但我无法得到它.

我受到std :: function模板的启发,它允许你使用与函数原型相似的语法,比如......

std::function<int(MyClass&)> myfunc;
Run Code Online (Sandbox Code Playgroud)

所以我认为对阵列及其大小有类似的东西会很好.我可以使用任何最新的c ++特性(c ++ 11/14).

c++ templates template-meta-programming c++11

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

子类节点上的访问者的 C++ 访问者模式失去了“是”关系

首先,抱歉,如果这是重复的。但我没有看到任何类似的东西。

我熟悉访问者模式,并且正在尝试为图表上的访问者添加更多的灵活性。如果我有节点类 A、B、C、SubB(继承 B),我希望能够有一个接受 B 节点的访问者,并且将自动接受 SubB 节点而不知道它们(定义accept())。

明显的好处是我可以整天进行子类化,并且访问者不需要关心为这些类型定义访问。

我有代码和结果要在下面演示。如您所见,以下是它将访问的节点。

new Node(),
new ANode(),
new BNode(),
new CNode(),
new BNode(),
new SubBNode()
Run Code Online (Sandbox Code Playgroud)

基本上 CountVisitor 正确地报告它发现了 2 个 B,我明白为什么。CountVisitor.visit(SubB&) 不会被覆盖,而是会重定向到 Visitor.visit(SubB&),从而跳过计数。然而,我想要它报告 3 ( 2 Bs + 1 SubB ) 的功能,因为 SubB “是一个” B。我已经考虑过这一点,但我只是不知道如何让类型系统做到这一点。我应该如何重新安排事物以实现该功能?如果保持“是”关系,我也愿意接受替代模式,但我确实认为如果这个障碍得到解决,访问者将是完美的。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Visitor;

class Node
{
  public:
  vector<Node*> children;
  virtual void accept(Visitor&);
};

class ANode : public Node
{
  public:
  virtual void accept(Visitor&);

};
class BNode : public Node
{ …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance design-patterns visitor-pattern

5
推荐指数
1
解决办法
525
查看次数

这意味着什么(C++函数指针)?

所以我正在查看一些c ++源代码,并想知道这意味着什么.我认为这意味着将tmp称为函数,但我不确定.

char* tmp;
///stuff filling tmp with values
((void (*)())tmp)();
Run Code Online (Sandbox Code Playgroud)

c c++ function-pointers

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

Linq Single Column Group不工作

我是Linq noob所以请原谅我的无知,但我需要按表格中的列分组,然后返回该列.我应该得到一个唯一数字列表.

这是我的Linq

from r in myTable
group r.UserID by r.UserID
Run Code Online (Sandbox Code Playgroud)

但是在Linq pad中它接近我想要的但是每个相似的ID都有一个'key'或者所有相同id组合在一起的东西,包含在结果中.我只想要一个数字列表.

这是完美的SQL.

SELECT UserID FROM myTable
GROUP BY UserID
Run Code Online (Sandbox Code Playgroud)

c# linq group-by

0
推荐指数
1
解决办法
2650
查看次数