小编Jus*_*mer的帖子

如何在VS2013 for C++中关闭自动格式化?

VS2013为C++添加了自动格式化.我个人对自动格式化的看法是,它最终对开发人员有害,但我必须接受并非所有人都同意.我的错误是我似乎无法完全禁用自动格式化.我取消选中工具 - >文本编辑器 - > C/C++ - >格式化 - >常规下的每个复选框,但是当我输入时:

void f ()
Run Code Online (Sandbox Code Playgroud)

VS2013取而代之

void f()
Run Code Online (Sandbox Code Playgroud)

这不是这个特定项目的代码标准,这意味着我必须返回并插入一个空格.还有其他一些我必须与VS作斗争的例子.

我不想更改间距设置,因为

  1. 我在不同代码标准的多个项目中工作
  2. 我不相信自动格式化所以我只是想让它离开我的路

我只是希望VS不自动修改我的代码.

PS.我并不反对VS可以格式化代码,但我想手动调用它

c++ visual-studio visual-studio-2013

38
推荐指数
3
解决办法
3万
查看次数

如何在C#中改进推送数据管道以在性能上匹配F#

对我来说,一个reoccuring宠物项目是在F#中实现基于推送的数据管道.推送管道比LINQ之类的拉管道更简单,更快(尽管它们没有拉管道的所有功能).

让我困惑一段时间的事情是,我似乎没有在C#中实现推送管道,这在F#中作为我的推送管道是有效的.我正在寻找有关如何使我的C#实现更接近F#的输入.

F#中的简单推送管道可以表示如下:

type Receiver<'T> = 'T            -> unit
type Stream<'T>   = Receiver<'T>  -> unit
Run Code Online (Sandbox Code Playgroud)

在C#中我们可以这样写:

public delegate void Receiver<in T>(T v);
public delegate void Stream<out T>(Receiver<T> r);
Run Code Online (Sandbox Code Playgroud)

这里的想法是a Stream<>是一个函数,给定一个值接收器调用接收器,其中包含流中的所有值.

这允许我们map在F#中定义这样的' Select`:

let inline map (m : 'T -> 'U) (s : Stream<'T>) : Stream<'U> =
  fun r -> s (fun v -> r (m v))
Run Code Online (Sandbox Code Playgroud)

C#:

public static Stream<U> Map<T, U>(this Stream<T> t, Func<T, U> m) =>
  r => t(v => r(m(v)));
Run Code Online (Sandbox Code Playgroud)

我们可以实现其他功能,直到我们可以定义测试开销的数据管道.

let trivialTest n …
Run Code Online (Sandbox Code Playgroud)

c# linq performance f#

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

可以将'auto &&`参数完美转发吗?

对于模板函数,我使用完美转发,如下所示:

template<typename T>
void f (T && v)
{
  g (std::forward<T> (v));
}
Run Code Online (Sandbox Code Playgroud)

如何auto &&C++14lambda表达式中完善前向参数?

auto f = [] (auto && v)
  {
    g (std::forward<??> (v));
  };
Run Code Online (Sandbox Code Playgroud)

(尝试谷歌,但没有得到我选择的关键字的任何好点击)

c++ perfect-forwarding c++14

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

有没有办法写一种类型的"可供选择"的SFINAE测试?

我已经使用SFINAE表达式来测试类型是否支持 operator<<

namespace details
{
  template<typename T>
  struct sfinae_true : std::true_type
  {
  };

  template<typename T>
  sfinae_true<decltype (std::declval<std::ostream &> () << std::declval<T const &> ())> test_for_ostream (int);

  template<typename T>
  std::false_type test_for_ostream (long);
}

template<typename T>
struct supports_ostream : decltype (details::test_for_ostream<T> (0))
{
};
Run Code Online (Sandbox Code Playgroud)

我想测试的是,如果这种类型T可以像这样迭代

for (auto && v : vs) {} // vs is T const &
Run Code Online (Sandbox Code Playgroud)

困境在于这是一个陈述,而不是一个使其与之不兼容的表达 decltype

我正在考虑使用lambdas将语句转换为这样的表达式

auto x = [] () { for (auto && v : vs) {}; return 0; } (); // vs …
Run Code Online (Sandbox Code Playgroud)

c++ templates for-loop sfinae c++11

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

构建期间生成T4代码,自定义程序集引用

我有一个T4模板,可以处理我项目中的几个.tt文件.我还有一些我定义的自定义类来帮助代码转换过程.

<#@ template language="C#"  hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #> 
Run Code Online (Sandbox Code Playgroud)

这适用于Visual Studio,我有一个VS宏,它正确定义$(TargetDir).

现在,我想在构建过程中执行代码生成过程.我补充说:

<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup>
<T4ReferencePath Include="$(OutputPath)" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 
Run Code Online (Sandbox Code Playgroud)

我的构建运行,但我得到:

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets(407):主机在尝试解析程序集引用'$(TargetDir)\ MyDependency时抛出异常. DLL".转换不会运行.抛出以下异常:System.IO.FileLoadException:给定的程序集名称或代码库无效.(来自HRESULT的异常:0x80131047)System.Reflection.AssemblyName.nInit(RuntimeAssembly&assembly,Boolean forIntrospection,Boolean raiseResolveEvent)位于System.Reflection.AssemblyName.nInit()的Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation(String strongName)at at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost主机,TemplateProcessingSession会话)中的ResolveAssemblyReference(String assemblyReference).Line = -1,Column = -1

显然它不会$(TargetDir)在Team构建上下文中解析.

我尝试将TargetDir添加到我的构建配置的属性组中,但无济于事.该值不会传递到T4代码生成器的上下文.

我不想使用环境变量.

如何$(TargetDir)在Team Build上下文中正确设置?

.net msbuild t4

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

为什么LINQ(c#)与Seq(f#)之间存在性能差异

我做了非常简单的C#和F#测试程序.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static int Remainder(int num)
        {
            return num % 2;
        }
        static int SumOfremainders(IEnumerable<int> list)
        {
            var sum = 0;
            foreach (var num in list)
            {
                sum += Remainder(num);
            }
            return sum;
        }

        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            var nums = Enumerable.Range(1, 10000000);
            sw.Start();
            var a = SumOfremainders(nums);
            sw.Stop();
            Console.WriteLine("Duration " + (sw.ElapsedMilliseconds));
            Console.WriteLine("Sum of remainders: {0}", a);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# linq performance f#

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

How to adapt Action&lt;string&gt; into FSharpFunc&lt;string, unit&gt;

Attempts to pass an Action to F# code is producing the following syntax error in .net 4.6.1, VS2015...

Error   CS1503  Argument 1: 
cannot convert from 'System.Action<string>' to 
'Microsoft.FSharp.Core.FSharpFunc<string, Microsoft.FSharp.Core.Unit>'
Run Code Online (Sandbox Code Playgroud)

The attempts are as follows...

using Microsoft.FSharp.Core;

....

Action<string> logger = Console.WriteLine;

App.perform(new Action<string>(Console.WriteLine), args);

App.perform(logger, args);

App.perform(new Action<string>(msg => Console.WriteLine(msg)), args);

App.perform((new Action<string>(msg => Console.WriteLine(msg))), args);

App.perform((new Func<string,Unit>(msg => Console.WriteLine(msg))), args);

App.perform(new Func<string,Unit>(Console.WriteLine), args);
Run Code Online (Sandbox Code Playgroud)

What is the proper way to pass System.Console.WriteLine from C# to F#?

.net c# f#

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

为什么通用代数数据类型在成员类型上需要`T`?

我想定义一个通用代数数据类型,用于我的parse函数,如下所示:

sealed class Result<T> {
    class Success(val value: T, val pos: Int) : Result<T>()
    class Failure(val message: String, val pos: Int) : Result<T>()
}

fun <T> parse(t: Parser<T>, input: String, initialPos: Int = 0, collectErrors: Boolean = true) : Result<T> {
Run Code Online (Sandbox Code Playgroud)

但是,这是不允许的,因为这是T一个未定义的引用.

如果我添加T到所有成员类型它工作:

sealed class Result<T> {
    class Success<T>(val value: T, val pos: Int) : Result<T>()
    class Failure<T>(val message: String, val pos: Int) : Result<T>()
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这有点令人困惑,这让我相信我在这里遗漏了一些东西.T在第一种情况下定义成员类型时为什么没有看到?

另外,在创建Success我希望语法为的实例时:

Result<T>.Success<T>(tv.someValue, pos) …
Run Code Online (Sandbox Code Playgroud)

generics kotlin

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

如何执行val的多步骤初始化

为了学习一点,kotlin我正在松散地在经典的Monadic Parser Combinators 上构建一个解析器组合库.

在我的情况下,由于递归语法,我需要转发声明一个解析器.在准备最终表达式解析器时,我需要更新前向声明

我的第一次尝试是这样的

val addLike             = mulLike separatedBy addLikeSeparator
val expression          = 
  forwarded.second(addLike)
  addLike
Run Code Online (Sandbox Code Playgroud)

这个想法是执行一个简短的addLike初始化然后返回初始化值.当我进行一些F#编程时,这是一种非常常见的模式,我认为这是一个很好的模式,因为它简化了隐藏初始化细节.

kotlin但是,这不起作用:

Error:(195, 5) Kotlin: Expecting a top level declaration
Run Code Online (Sandbox Code Playgroud)

这种方法也失败了:

val addLike             = mulLike separatedBy addLikeSeparator
val expression          = forwarded.second(addLike); addLike
Run Code Online (Sandbox Code Playgroud)

问题似乎是;将两者结合expressions成一个statement.

所以我试着,希望它的行为有点像C/C++,但没有运气:

val addLike             = mulLike separatedBy addLikeSeparator
val expression          = forwarded.second(addLike), addLike
Run Code Online (Sandbox Code Playgroud)

阅读kotlin规范后,我发现没有明确的解决方案,这就是我转向StackOverflow的原因.这种模式可以用惯用的方式实现kotlin吗?

更新

@Eric建议使用run,如果我更新我的代码,最终解决方案最终有点像这样:

val expression          = run () …
Run Code Online (Sandbox Code Playgroud)

kotlin

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