如果这是重复,我会道歉.我在搜索中找不到任何东西.
我可以使用任何最新的功能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) 如果这是重复我道歉.我环顾四周,发现了类似的问题,但没有完全像这样.
如果我像这样实例化模板......
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).
首先,抱歉,如果这是重复的。但我没有看到任何类似的东西。
我熟悉访问者模式,并且正在尝试为图表上的访问者添加更多的灵活性。如果我有节点类 A、B、C、SubB(继承 B),我希望能够有一个接受 B 节点的访问者,并且将自动接受 SubB 节点而不知道它们(定义accept())。
明显的好处是我可以整天进行子类化,并且访问者不需要关心为这些类型定义访问。
我有代码和结果要在下面演示。如您所见,以下是它将访问的节点。
Run Code Online (Sandbox Code Playgroud)new Node(), new ANode(), new BNode(), new CNode(), new BNode(), new SubBNode()
基本上 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 ++源代码,并想知道这意味着什么.我认为这意味着将tmp称为函数,但我不确定.
char* tmp;
///stuff filling tmp with values
((void (*)())tmp)();
Run Code Online (Sandbox Code Playgroud) 我是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)