小编Sca*_*nth的帖子

在Visual Studio 11中复制一行代码的快捷方式

有没有办法在新的Visual Studio 11中使用键盘快捷键复制一行代码?
我在之前的版本中设置了一个小宏,但根据这篇文章,宏已停止使用.

我可以使用任何解决方法吗?

keyboard-shortcuts visual-studio visual-studio-2012

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

普通lambda的Arity

可以通过访问它来推断出非泛型lambda的arity operator().

template <typename F>
struct fInfo : fInfo<decltype(&F::operator())> { };

template <typename F, typename Ret, typename... Args>
struct fInfo<Ret(F::*)(Args...)const> { static const int arity = sizeof...(Args); };
Run Code Online (Sandbox Code Playgroud)

对于像没有模板化的东西一样[](int x){ return x; },这很好看operator().

但是,通用lambdas operator()会对模板进行模板化,并且只能访问模板的具体实例 - 这有点问题,因为我无法手动提供模板参数,operator()因为我不知道它是什么.

所以,当然,像

auto lambda = [](auto x){ return x; };
auto arity = fInfo<decltype(lambda)>::arity;
Run Code Online (Sandbox Code Playgroud)

不起作用.

我不知道要投射什么,也不知道提供什么模板参数(或多少)(operator()<??>).
任何想法如何做到这一点?

c++ generic-lambda c++14

9
推荐指数
2
解决办法
937
查看次数

使用std :: map的Visual Studio 11编译时错误

以下代码使用gcc-4.5.1编译,但不在Visual Studio 11中编译.

#include <map>
#include <array>

typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;

int main(){

   std::map<const unsigned int, std::array<const unsigned int, 4> > x; 
   std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
   x.insert(pairus(1, troll));

   auto z = x[1];
}
Run Code Online (Sandbox Code Playgroud)

1现在映射到std::array<> troll.插入效果很好,程序编译.但是,只要我尝试auto z = x[1]- >因此尝试获取1映射到的数组troll,程序不会编译时出现以下错误:

error C2512: 'std::array<_Ty,_Size>::array' :没有适当的默认构造函数可用

什么导致gcc和vs11之间的行为差​​异以及如何解决它?

谢谢.

c++ gcc compiler-errors visual-studio

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

Android NDK / 一般 JNI 问题:将 object / jobject 转换为 c++ 用户定义类型

我有一个本机函数调用,它调用我的 C++ 代码,并且此代码创建我的用户定义类的实例。

该函数具有以下签名:

public native Object loadEngine(int arg);
Run Code Online (Sandbox Code Playgroud)

进行此调用后,我想调用更多本机函数,这些函数将获取从 loadEngine() 返回的“对象”并对其进行修改,或从中请求数据。

签名示例:

public native String loadEngine(Object engine, int queryID);
Run Code Online (Sandbox Code Playgroud)
  1. 有可能做到这一点吗?
  2. 如果可能的话,我如何将我的 GameEngine 数据类型转换为 java Object 或 jni jobject。
  3. Java 会自动将其作为引用传递,这样它就永远不会被复制,并且我将能够修改它,对吗?

以下场景会生成一个错误,指出它无法将 GameEngine 转换为 jobject,这是可以理解的,但这是我对 Java 经验很少的最好的尝试:

JNIEXPORT jobject JNICALL Java_package_loadEngine
  (JNIEnv *env, jobject obj, jint arg) {
     GameEngine engine(params);
     return (jobject)engine;
  }

JNIEXPORT jstring JNICALL Java_package_queryAction
  (JNIEnv *env, jobject obj, jobject engine, jint arg) {
     String ret = newString(Integer.toString((GameEngine)engine.unimportant()));
     return ret;
  }
Run Code Online (Sandbox Code Playgroud)

由于我通过 jni 调用本机 java 代码到 c++,不幸的是我无法将本机函数定义为:

 public …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface android android-ndk

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

在接口中约束函数参数

在接受函数的接口中约束函数参数的语法是什么?我试过了:

interface Num a => Color (f : a -> Type) where
     defs...
Run Code Online (Sandbox Code Playgroud)

但它说 Name a is not bound in interface...

idris

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

为什么这个值在函数返回后仍然存在?

标题几乎总结了这一点.为什么我可以将本地创建的Point a(在函数ReadPoint()中)分配到一个不同范围的变量中.本地创建的Point a是否与函数readPoint()堆栈一起"弹出"?到底发生了什么?

struct Point readPoint(void)
        {
            struct Point a;

                printf("x = ");
                scanf("%lf",&b.x);

                printf("y = ");
                scanf("%lf",&b.y);

            return a;
        }

        int main(int argc, char **argv) {
            Point test = readPoint();
            printPoint(test);
            return 0
        }
Run Code Online (Sandbox Code Playgroud)

c memory

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

使用Lambda参数重写Coq

我们有一个函数,可以将元素插入列表的特定索引中。

Fixpoint inject_into {A} (x : A) (l : list A) (n : nat) : option (list A) :=
  match n, l with
    | 0, _        => Some (x :: l)
    | S k, []     => None
    | S k, h :: t => let kwa := inject_into x t k
                     in match kwa with
                          | None => None
                          | Some l' => Some (h :: l')
                        end
  end.
Run Code Online (Sandbox Code Playgroud)

上述功能的下列性质是相关的对问题(证明省略,对直接的感应ln未固定的):

Theorem inject_correct_index : forall A x …
Run Code Online (Sandbox Code Playgroud)

proof coq

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

Coq中的简单身份

我可能遗漏了一些基本的东西.

我可以证明以下"身份":

Theorem identity_simple : forall a : Prop, a -> a.
Run Code Online (Sandbox Code Playgroud)

随着intro. intro. assumption..

但是,我似乎无法证明:

Theorem identity : forall a : Prop, a.
Run Code Online (Sandbox Code Playgroud)

我当然能做到intro,但这让我:

a : Prop
_________(1/1)
a
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.
第一种形式似乎是多余的,表明对所有人而言a,a意味着a.

theorem-proving coq

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

添加指针的C行为

鉴于:

int a[N];
int *p; 
Run Code Online (Sandbox Code Playgroud)

为什么a-p工作还a+p没有错误:"二进制+的操作数无效".

c arrays pointers

-2
推荐指数
1
解决办法
97
查看次数