小编Bra*_*rad的帖子

命名函数参数与类成员相同

这是我在编写C++时常常做的事情,而且我一直想知道它是一个"坏"的习惯(这种行为是标准化的吗?)

让我们说我有一节课:

Class Foo {
  public:
    Foo(int x) {
      //this->x is the member "x" of Foo
      //x is the paramater "x" to the function
      this->x = x; //Sets Foo::x to x (parameter x)
    }

  private:
    int x;


};
Run Code Online (Sandbox Code Playgroud)

请注意,如何Foo::Foo(int x)命名参数,该参数x的名称与成员变量的名称相同Foo.

我通常只是使用use this->x = x;来为成员变量赋值参数的值,这似乎对我有用(我通常使用MSVC).在MSVC(和我认为的GCC)中,访问x将访问名为的参数x而不是名为的成员x.这是所有c ++编译器的标准化行为吗?有没有什么能阻止编译器只x与成员变量而不是参数变量相关联?(例如:this->x;相当于this->x = this->x;)

c++ standards

3
推荐指数
2
解决办法
128
查看次数

带有MySQL的.NET Core 2.0:指定的密钥太长;最大密钥长度为3072字节

我是一名PHP / MySQL开发人员,试图转移到其他技术,例如.NET Core。我不确定我是否喜欢通过MySQL切换到SQL Server的想法(由于许可),因此我一直在尝试使.NET Core与MySQL很好地兼容。

我已经使用Identity作为身份验证方法建立了一个相当基本的.NET Core 2.0项目,并且当数据库驱动程序SqlLite与本地数据库一起使用时,一切工作正常。我尝试切换到MySQL数据库并运行迁移,但迁移失败。

我收到错误消息:Specified key was too long; max key length is 3072 bytes 尝试运行以下表创建查询时:

CREATE TABLE `AspNetUserTokens` (
    `UserId` varchar(767) NOT NULL,
    `LoginProvider` varchar(767) NOT NULL,
    `Name` varchar(767) NOT NULL,
    `Value` text NULL,
    PRIMARY KEY (`UserId`, `LoginProvider`, `Name`)
);
Run Code Online (Sandbox Code Playgroud)

Mysql数据库使用字符集,UTF8mb4因此不能使用上面指定的主键,该主键的大小约为9204字节。

如何自定义默认身份表的创建方式?如果可能的话,我想用这个表上更合理的主键(只不过是auto increment整数)来替换大键。

有什么方法可以自定义默认身份相关表的创建方式,而无需手动修改迁移文件。我可以OnModelCreating用我的方法做些什么ApplicationDbContext吗?我应该停止与MySQL对抗并屈服于MS SQL吗?

编辑

通过使用Pomelo MySQL驱动程序而不是Oracle,我能够解决该问题。Pomelo驱动程序似乎默认将字符串字段的最大长度限制为127个字符,从而使上述键可以容纳3072个字节的限制。但是,我仍然会对了解如何微调和自定义.NETCore脚手架中提供的基本Identity表感兴趣。

mysql asp.net-identity asp.net-core-2.0

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

使用 ToString("C") 时,Blazor 显示 ¤ 而不是 $

我正在构建 Blazor Web 应用程序 (wasm)。我使用 ToString("C") 将值显示为货币,但是美元符号显示为 \xc2\xa4,例如而\xc2\xa44.83不是$4.83。根据维基百科“货币符号 \xc2\xa4 是用于表示未指定货币的字符”

\n

这似乎是一个本地化问题,但我的浏览器/Blazor 没有检测到我是 en-US 并显示 $ 符号。如何显示正确的货币符号?

\n

我目前使用的是.Net 5,但这个问题也存在于.Net core 3.x上。

\n

localization blazor

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

Xna(C#)和C++的网络连接?

我和一些朋友正在考虑与XNA游戏工作室一起制作在线游戏.我们的游戏主要使用Winsock作为网络部分,但是我们最近的项目使用了RakNet,其中服务器使用C++,而客户端使用了我编写的小型RakNet包装器.据我所知,XNA不能真正使用DLL,所以我想知道什么是一个很好的网络解决方案.

1)C#已经具备了一些网络功能,但用C#编写服务器是个不错的主意.我主要使用C++来获得原始功能.

2)如果用C#编写服务器是个坏主意,他们的任何库都可以使用C++和C#吗?或者我可以只为客户端使用C#网络,为服务器使用Winsock(如果它们是兼容的......我假设C#使用标准TCP层......)?

希望你们对网络选项有一些建议.

提前致谢!

c# c++ networking xna winsock

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

如何解释自定义脚本语言?

我想知道解析/解释自定义语言的最简单方法是什么.有没有可以帮助我的图书馆?

我本质上希望最终用户能够使用我设计的自定义语法编写脚本(语法可能类似于c ++),我需要使用我的C++原型来解释脚本,就像有一个C++库一样用于解析LUA.

是否有任何库/示例可以帮助我,或者我只需要进行手动标记,解析和解释?

c++ interpreter

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

删除字符串时堆损坏

这是我的代码:

std::string readString()
{
     int strLen = Read<int>();
     char* rawString = new char[strLen];
     Read(rawString, strLen);
     rawString[strLen] = '\0';
     std::string retVal(rawString);
     delete [] rawString;
     return retVal;
 }
Run Code Online (Sandbox Code Playgroud)

第一行读取字符串的长度.
第二行创建一个具有字符串长度
的新char数组(c-string)第三行读取字符串(从文件中读取它)
第4行在末尾添加NULL.
第5行从c-string中创建一个std :: string.
第6行删除了c-string(HEAP CORRUPTION HAPPENS HERE)
第7行返回字符串,但由于出错,它永远不会到达这一点.

在第6行,我遇到堆损坏错误:CRT检测到应用程序在堆缓冲区结束后写入内存.

我的问题可能很明显,但为什么我会出现堆腐败?当我创建一个std :: string时,它应该复制字符串,我应该可以安全地删除c-string.

目前,我怀疑std :: string在我删除它后试图访问c-string.

有任何想法吗?

c++ string heap stl cstring

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

Laravel 未将模型加载到路由中

我目前正在开发一个 PHP Laravel 应用程序,到目前为止一切顺利。但是,我最近调用的资源FreightRequest导致了我无法弄清楚的极其奇怪的行为。

我的路由文件有以下内容:

Route::resource('freightrequests', 'FreightRequestController');

当我访问时http://localhost/freightrequests/1,laravel 没有正确地将模型绑定到我的FreightRequestController@show方法。

我的方法是这样的:

public function show(FreightRequest $freightRequest)
{
    dd($freightRequest);

    return view('freightrequests.show', compact('freightRequest'));
}
Run Code Online (Sandbox Code Playgroud)

以上结果导致以下转储:

FreightRequest {#429 ?
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #events: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5

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

C#泛型协变

我遇到了一个泛型问题,我认为可以通过协方差解决,但我不完全了解协方差的工作原理以及如何正确声明它。假设我有以下接口和类:

public interface IOwnedObject<TUser>
where TUser : IBaseUser
{
    string UserId { get; set; }
    TUser User { get; set; }
}

public interface IBaseUser
{
    string Id { get; set; }
}

public class User : IBaseUser
{
    public string Id { get; set; }
}

public class SomeOwnedObject : IOwnedObject<User>
{
    public string UserId { get; set; }
    public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后考虑以下代码:

var obj = new SomeOwnedObject();
            if(obj is IOwnedObject<IBaseUser> o)
                Console.WriteLine("Success"); // …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

libtorrent未解决外部问题

当我编译链接到libtorrent.lib的程序时,我收到以下错误.我尝试使用不同的设置编译libtorrent,我尝试启用/禁用DHT,不推荐使用的功能等.

错误LNK2019:未解析的外部符号"void __cdecl libtorrent :: rel_performancetimer_pools_nolog_resolvecountries_deprecated_dht_ext_(void)"

有人在这里熟悉libtorrent,或者任何人都可以提供任何建议来摆脱这个错误?我没有看到我需要链接到的任何其他库.

提前致谢.

c++ compilation unresolved-external libtorrent

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