小编Ser*_*sen的帖子

if语句中没有编译的结构化绑定初始化程序

阅读C++ 17,现在可以在if语句中进行多次初始化:

if (int x = func(), y = func2(); x > 0 && y > 0)
{
}
Run Code Online (Sandbox Code Playgroud)

不错的,也结合了C++ 17中的另一个功能,结构化绑定:

if (auto[iter, success] = set.insert("Hello"); success)
{   }
else    
{   }
Run Code Online (Sandbox Code Playgroud)

但是,在VisualStudio 2017中无法编译这两个功能.

if (auto[iter, success] = set.insert("Hello"), [iter2, success2] = set.insert("Foo"); success && success2)
{}
else
{}
Run Code Online (Sandbox Code Playgroud)

失踪 ';' 之前','

这是VS2017中的错误还是不可能?

c++ c++17 structured-bindings

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

运行System.Threading.Tasks.Task时出现异常

请考虑以下代码,该代码使用带有CancellationTokenSource的基本任务库功能.它启动一个线程,用字符填充字典并从SQL服务器数据库中读取数据.线程在大约10分钟后结束,每2小时再次触发,在线程仍在运行时先调用Cancel.

private CancellationTokenSource mTokenSource = new CancellationTokenSource();

internal Prices(Dictionary<string, Dealer> dealers)
{
    mDealers = dealers;
    mTask = Task.Factory.StartNew
            (() => ReadPrices(mTokenSource.Token), mTokenSource.Token);
}

internal void Cancel() 
{
    mTokenSource.Cancel();
}
private void ReadPrices(CancellationToken ct) 
{
     using (SqlConnection connection = 
            new   SqlConnection(ConfigurationManager.AppSettings["DB"]))   
     {
         connection.Open();
         var dealerIds = from dealer in mDealers.Values 
                         where dealer.Id != null 
                         select dealer.Id;
         foreach (var dealerId in dealerIds) 
         {
             if (!ct.IsCancellationRequested)
             {
                 FillPrices(connection);
             }
             else
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在某些时候,应用程序在事件日志中崩溃并出现以下异常.

应用程序:Engine.exe Framework版本:v4.0.30319描述:由于未处理的异常,进程已终止.异常信息:System.AggregateException Stack:at System.Threading.Tasks.TaskExceptionHolder.Finalize()

它必须与这里的代码有关,因为在其他任何地方都没有使用Tasks库,但我无法弄清楚代码有什么问题.有没有人知道这里有什么问题?

.net c# task task-parallel-library

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

在构造函数初始化器中使用map的初始化列表

尝试创建int到成员函数指针的映射,并在构造函数初始值设定项中初始化它.像这样:

class X
{
    using STATEFUNC = void(X::*)(int);
public:
    X() : m{ { 1, &setState1 } } {}

    void setState1(int x) { cout << "state1" << endl; }

    void setState2(int x) { cout << "state2" << endl; }


    std::map<int, STATEFUNC> m;
};
Run Code Online (Sandbox Code Playgroud)

我会说这是正确的,但Visual Studio 2017说:

错误C2664'std :: map,std :: allocator >> :: map(std :: initializer_list>)':无法将参数1从'initializer list'转换为'std :: initializer_list>'

错误C2276'&':对绑定成员函数表达式的非法操作

从成员函数中删除运算符的地址时,第一条错误消息保持不变,但第二条错误消息更改为:

错误C3867'X :: setState1':非标准语法; 使用'&'创建指向成员的指针

如何在构造函数初始化列表中初始化int到成员函数指针的映射?

c++ member-function-pointers initializer-list c++11

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

在 Visual Studio Code WSL 中调试 Go 代码

我有一个带有用于 Windows 的 Linux 子系统的 Visual Studio Code 环境,它正在编译和运行一个 Go 项目就好了。

现在我正在尝试按照此链接运行 delve 调试器:

https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code

但我无法让它运行,无论是远程还是本地。

在 launch.json 中尝试了所有类型的配置,但没有命中断点,也没有打印错误消息。

有没有人使用 WSL 在 VSCode 上调试运行?

go visual-studio-code delve

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

C#所有管道实例都很忙

以下代码创建一个新线程,首先作为命名管道客户端发送参数,然后作为服务器检索结果.之后,它在另一个充当命名管道服务器的AppDomain中执行一个函数,之后作为客户端发回结果.

public OrderPrice DoAction()
{
  Task<OrderPrice> t = Task<OrderPrice>.Factory.StartNew(NamedPipeClient, parameters);

  if (domain == null)
  {
    domain = AppDomain.CreateDomain(DOMAINNAME);
  }
  domain.DoCallBack(AppDomainCallback);

  return t.Result;
}

static OrderPrice NamedPipeClient(object parameters) {
  OrderPrice price = null;

  using (NamedPipeClientStream stream = new NamedPipeClientStream(PIPE_TO)) {
    stream.Connect();
    SerializeToStream(stream, parameters);
  }

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_BACK)) {
    stream.WaitForConnection();

    price = (OrderPrice)DeserializeFromStream(stream);
  }

  return price;
}

void AppDomainCallback() {
  OrderPrice price = null;

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_TO)) {
    stream.WaitForConnection();

    List<object> parameters = (List<object>)DeserializeFromStream(stream);

    if (mi != …
Run Code Online (Sandbox Code Playgroud)

.net c# named-pipes

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

聚合初始化派生类

以下代码无法使用Visual Studio2017或在线GDB进行编译.我期望它编译,因为迭代器只是一个类型的类,它是公开继承的.这是不允许的还是在VS2017中不起作用?

template<typename T>
struct Gen : public std::iterator<std::input_iterator_tag, T>
{
    T value;
};

int main()
{   
    Gen<int> g = Gen<int>{ 10 }; // this doesnt
    Gen<int> g2 = Gen<int>{ {}, 10 }; // neither does this
}
Run Code Online (Sandbox Code Playgroud)

错误是

错误C2440'初始化':无法从'初始化列表'转换为'Gen'

c++ initialization

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

StringBuilder和'+'运算符

我在这里维护这个代码,通常有如下模式:

StringBuilder result = new StringBuilder();

result.Append("{=" + field.Name + "={");
Run Code Online (Sandbox Code Playgroud)

这样做时,看起来像是浪费了很多无用的对象构造,我想重写一下:

result.Append("{=").Append(field.Name).Append("={");
Run Code Online (Sandbox Code Playgroud)

第一个版本对GC造成的压力更大是否正确?或者是否在C#编译器中使用字符串文字进行了一些优化,其中串联字符串与字符串文字不会创建临时对象?

.net c# compiler-optimization

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

Web 服务器中缺少 http 标头

我使用 BaseHTTPRequestHandler http 服务器并从互联网复制/粘贴代码。这是设置响应/标头的部分

class S(BaseHTTPRequestHandler):    
    def _set_response(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
Run Code Online (Sandbox Code Playgroud)

但是当使用curl调用服务器时,响应是:

curl: (1) 不允许时收到HTTP/0.9

通过浏览器调用时:

ERR_INVALID_HTTP_RESPONSE

协议版本是 http/1.0

通过nginx反向代理调用Web服务器,这只是

   location / {
       proxy_http_version 1.1;
       proxy_pass  http://${NODE_NAME}:9000/;
   }
Run Code Online (Sandbox Code Playgroud)

为此还需要更多标头吗?我们如何在 BaseHTTPRequestHandler 或 nginx 中设置正确的 http 标头?

python http nginx

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

带有TransactionScope错误的Nhibernate - DTC事务预处理阶段失败 - 升级到Nhibernate 3.0

在事务Scope.Eg中使用Nhibernate和ADO.Net操作时,我收到以下异常.Nhibernate 2.1很好,但现在升级到3.0,这会引发错误.

using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
        GetmemberId(); --> NHibernate Call
        Update(); ADO Call OracleDB
}
Run Code Online (Sandbox Code Playgroud)

由于此作为环境事务,NHibernate的尝试很快就处理交易之前外部事务completes.correct我,如果我错了,有没有什么办法,因为帮助我,但是当我移动NHibernate的外呼TransactionScope的一切工作正常.我给出的示例是示例1,mines涉及更复杂的示例,因为我在TransactionScope中保留了两个调用,并且Iam得到的错误如下所示,

错误13 NHibernate.Impl.AbstractSessionImpl - DTC事务预处理阶段失败System.ObjectDisposedException:无法访问已处置的对象.对象名称:'交易'.在System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption)在System.Transactions.TransactionScope.SetCurrent(事务newCurrent)在System.Transactions.TransactionScope.PushScope()
在System.Transactions.TransactionScope.Initialize(事务transactionToUse,时间跨度scopeTimeout,布尔interopModeSpecified)在System.Transactions.TransactionScope..ctor(事务transactionToUse)在NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(preparingEnlistment preparingEnlistment)2011-02-08 13:41:46033 ERROR 13 NHibernate.Impl .AbstractSessionImpl - DTC事务预处理阶段失败System.ObjectDisposedException:无法访问已处置的对象.对象名称:'交易'.在System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption)在System.Transactions.TransactionScope.SetCurrent(事务newCurrent)在System.Transactions.TransactionScope.PushScope()
在System.Transactions.TransactionScope.Initialize(事务transactionToUse,时间跨度scopeTimeout,布尔interopModeSpecified)在System.Transactions.TransactionScope..ctor(交易transactionToUse)在NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(preparingEnlistment preparingEnlistment)

nhibernate transactionscope

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

是否有通用的方法来填充数据库中的对象?

在我的软件中有这种常见模式,其中完成数据库查询并从该查询创建对象列表,其中对象是从a构造的SqlDataReader.

例如:

public List<Authorization> ReadAuthorizations() {
  List<Authorization> authorizations = new List<Authorization>();

  using (SqlConnection connection = GetConnection(mConnString)) {
    using (SqlDataReader authReader = CmdFactory.Instance.ReadAuthorizations(connection))                                   {
      while (authReader.Read()) {
        Authorization auth = new Authorization(authReader);
        authorizations.Add(auth);
      }
    }
 }

 return authorizations;
}
Run Code Online (Sandbox Code Playgroud)

您可以替换Authorization任何类型的对象,但每次都是相同的模式.唯一的变量是对象类型和用于查询数据库的函数.

List<Authorization> ReadAuthorizations()
List<Login> ReadLogins()
List<Batch> ReadBatches()
// etc
Run Code Online (Sandbox Code Playgroud)

现在我觉得这只是为一个通用功能而尖叫,我想出了这个:

public List<T> Read<T>(Func<SqlConnection, SqlDataReader> func) where T : new()
{
    List<T> objects = new List<T>();

    using (SqlConnection connection = GetConnection(_ropsString))
    {
        using (SqlDataReader reader = func(connection))
        {
            while …
Run Code Online (Sandbox Code Playgroud)

.net c# generics

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