这是我在编写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;)
我是一名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表感兴趣。
我正在构建 Blazor Web 应用程序 (wasm)。我使用 ToString("C") 将值显示为货币,但是美元符号显示为 \xc2\xa4,例如而\xc2\xa44.83不是$4.83。根据维基百科“货币符号 \xc2\xa4 是用于表示未指定货币的字符”
这似乎是一个本地化问题,但我的浏览器/Blazor 没有检测到我是 en-US 并显示 $ 符号。如何显示正确的货币符号?
\n我目前使用的是.Net 5,但这个问题也存在于.Net core 3.x上。
\n我和一些朋友正在考虑与XNA游戏工作室一起制作在线游戏.我们的游戏主要使用Winsock作为网络部分,但是我们最近的项目使用了RakNet,其中服务器使用C++,而客户端使用了我编写的小型RakNet包装器.据我所知,XNA不能真正使用DLL,所以我想知道什么是一个很好的网络解决方案.
1)C#已经具备了一些网络功能,但用C#编写服务器是个不错的主意.我主要使用C++来获得原始功能.
2)如果用C#编写服务器是个坏主意,他们的任何库都可以使用C++和C#吗?或者我可以只为客户端使用C#网络,为服务器使用Winsock(如果它们是兼容的......我假设C#使用标准TCP层......)?
希望你们对网络选项有一些建议.
提前致谢!
我想知道解析/解释自定义语言的最简单方法是什么.有没有可以帮助我的图书馆?
我本质上希望最终用户能够使用我设计的自定义语法编写脚本(语法可能类似于c ++),我需要使用我的C++原型来解释脚本,就像有一个C++库一样用于解析LUA.
是否有任何库/示例可以帮助我,或者我只需要进行手动标记,解析和解释?
这是我的代码:
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.
有任何想法吗?
我目前正在开发一个 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) 我遇到了一个泛型问题,我认为可以通过协方差解决,但我不完全了解协方差的工作原理以及如何正确声明它。假设我有以下接口和类:
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) 当我编译链接到libtorrent.lib的程序时,我收到以下错误.我尝试使用不同的设置编译libtorrent,我尝试启用/禁用DHT,不推荐使用的功能等.
错误LNK2019:未解析的外部符号"void __cdecl libtorrent :: rel_performancetimer_pools_nolog_resolvecountries_deprecated_dht_ext_(void)"
有人在这里熟悉libtorrent,或者任何人都可以提供任何建议来摆脱这个错误?我没有看到我需要链接到的任何其他库.
提前致谢.
c++ ×5
c# ×2
blazor ×1
compilation ×1
cstring ×1
generics ×1
heap ×1
interpreter ×1
laravel ×1
laravel-5 ×1
libtorrent ×1
localization ×1
mysql ×1
networking ×1
php ×1
standards ×1
stl ×1
string ×1
winsock ×1
xna ×1