在未来的C#版本中是否有"扩展属性"的计划?
在我看来,他们可能会非常直接地用更多的"编译器魔术"来实现.例如,在扩展方法名称上使用get_和set_前缀会将该方法转换为扩展属性:
public class Foo
{
public string Text { get; set; }
}
public static class FooExtensions
{
public static string get_Name(this Foo foo)
{
return foo.Text;
}
public static void set_Name(this Foo foo, string value)
{
foo.Text = value;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何技术限制可以防止这种情况发生?这会在幕后产生太多东西吗?不值得努力的重要性?
使用 HttpWebRequest,我可以调用 XDocument.Save()直接写入请求流:
XDocument doc = ...;
var request = (HttpWebRequest)WebCreate.Create(uri);
request.method = "POST";
Stream requestStream = request.GetRequestStream();
doc.Save(requestStream);
Run Code Online (Sandbox Code Playgroud)
是否可以用 做同样的事情HttpClient?直接的方法是
XDocument doc = ...;
Stream stream = new MemoryStream();
doc.Save(stream);
var content = new System.Net.Http.StreamContent(stream);
var client = new HttpClient();
client.Post(uri, content);
Run Code Online (Sandbox Code Playgroud)
但这会在 中创建另一个副本。XDocumentMemoryStream
我正在尝试使用 Visual Studio 2015 和 CMake 在我的计算机上构建一个开源项目。我已遵循所有步骤,并且预构建检查运行正常。但是,当我构建 INSTALL 以将软件安装在我在 CMAKE gui 中指定的文件夹中时,我收到 MSB3073 错误。错误的完整描述如下。
Severity Code Description Project File Line Suppression State Error
MSB3073 The command "setlocal
"C:\Program Files (x86)\CMake\bin\cmake.exe" -DBUILD_TYPE=RelWithDebInfo -P cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 1.
INSTALL C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets 133
Run Code Online (Sandbox Code Playgroud)
我搜索了相同的错误,发现一些尝试在没有写权限的目录中安装构建的人遇到了这个问题,但我已确保我具有写访问权限。我什至尝试使用管理员权限执行此操作,但仍然无法解决此问题。
对此的任何帮助将不胜感激。
用简单的struct如
struct Foo { int i; };
Run Code Online (Sandbox Code Playgroud)
我可以使用初始化列表创建一个新实例; 无需编写构造函数:
Foo foo { 314 };
Run Code Online (Sandbox Code Playgroud)
如果我现在添加一个移动构造函数
struct Bar
{
int i;
Bar(Bar&& other) { i = other.i; }
};
Run Code Online (Sandbox Code Playgroud)
初始化器不再起作用,我也必须添加一个构造函数:
Bar(int i) : i(i) {}
Run Code Online (Sandbox Code Playgroud)
我猜这种行为与这个答案有些相关(对于用户定义的move-constructor禁用隐式拷贝构造函数?),但更多细节会很好.
编辑:如答案所示,这与添加构造函数有关.如果我只添加一个移动运算符,这反过来会产生不一致的排序:
struct Baz
{
int i;
Baz& operator=(Baz&& other)
{
this->i = other.i;
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
初始化程序再次起作用,虽然"move"的语法略有不同(是的,这实际上是默认构造和移动赋值;但最终结果似乎大致相同):
Baz baz{ 3141 };
Baz b;
b = std::move(baz);
Run Code Online (Sandbox Code Playgroud) 我有一个用C++编写的非托管静态库(.dll):
// This is a personal academic project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
#include "program.h"
struct MyData
{
int32_t index;
char* name;
//uint8_t* data;
};
extern "C" {
__declspec(dllexport) MyData* GetMyData()
{
MyData* ms = new MyData();
ms->index = 5;
ms->name = "Happy string";
//ms->data = new uint8_t[5] { 4, 8, 16, 32, 64 };
return ms;
}
}
Run Code Online (Sandbox Code Playgroud)
'GetMyData'方法返回指向'MyData'对象的指针.
我使用'PInvoke'将此库导入C#projeсt并调用'GetMyData'方法.
// This is a personal academic project. Dear …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一个好的解决方案3天,但到目前为止我还没有找到任何解决方案.我的情况是:
客户端已安装应用程序(C++,控制台应用程序).启动时的应用程序将检查它与服务器的版本号并返回,或者它是最新的还是应该下载新版本.
如果必须下载新版本,我想用Curl下载新脚本,名称为:Application2.exe
但是,我希望它替换触发新版本下载的旧Application.exe.
我的解决方案是:Application.exe下载Application2.exe.下载后,它应该触发Updater.exe,它会让我们说5秒钟.在这5秒内(或任何最佳套房的时间跨度).在这5秒内,Application.exe有时间关闭,5秒后Updater.exe将Application.exe替换为Application2.exe.
现在更新完成,客户端安装了最新版本.
关于系统锁定文件等,此解决方案是否可行?
我尝试挂钩CopyFile2函数,为此我编写了这个 dll:
#include "..\..\..\minhook-1.3.3\include\MinHook.h"
WCHAR msgbuf[1024];
#define DbgPrint(format, ...) wsprintf(msgbuf, format, __VA_ARGS__); \
OutputDebugString(msgbuf);
#if defined _M_X64
#pragma comment(lib, "libMinHook.x64.lib")
#elif defined _M_IX86
#pragma comment(lib, "libMinHook.x86.lib")
#endif
typedef HRESULT(WINAPI *COPY_FILE_2)(
_In_ PCWSTR pwszExistingFileName,
_In_ PCWSTR pwszNewFileName,
_In_opt_ COPYFILE2_EXTENDED_PARAMETERS *pExtendedParameters
);
COPY_FILE_2 fpCopyFile2 = NULL;
HRESULT WINAPI DetourCopyFile2(
_In_ PCWSTR pwszExistingFileName,
_In_ PCWSTR pwszNewFileName,
_In_opt_ COPYFILE2_EXTENDED_PARAMETERS *pExtendedParameters
)
{
DbgPrint(L"=> DetourCopyFile2\n");
DbgPrint(L"DetourCopyFile2.pwszExistingFileName = %ws\n", pwszExistingFileName);
DbgPrint(L"DetourCopyFile2.pwszNewFileName = %ws\n", pwszNewFileName);
return fpCopyFile2(pwszExistingFileName, pwszNewFileName, pExtendedParameters);
}
void InstallHook()
{
DbgPrint(L"=> InstallHook\n"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 OpenMP 运行一个简单的项目。由于Visual Studio仅支持OpenMP 2,因此我尝试使用Visual Studio 2019自带的LLVM clang-cl编译并运行该项目。编译部分似乎没问题,但在链接阶段,链接器无法解析OMP函数。
这是我的代码,只有 1 个文件:
#include <stdio.h>
void fn() {
#pragma omp parallel num_threads(5)
{
int i;
#pragma omp task depend(in : i)
for (i = 0; i < 1; i++) {
printf("task\n");
}
}
}
int main() {
printf("hello\n");
fn();
}
Run Code Online (Sandbox Code Playgroud)
我的 Visual Studio 项目属性:
Windows SDK version:10.0(最新安装版本)(10.0.18362.0)Platform toolset: LLVM (clang-cl)C/c++ - Command Line - Additional Options:/Zc:twoPhase- -Xclang -fopenmp -vLinker - Additional Dependencies:C:\Program Files …我正在寻找一种方法来检测在 Windows 环境 C++ 控制台应用程序中是否按下了任何键。强调任何键,而不是特定的键或一组键。我搜索了整个网站,但找不到答案。我发现最好的方法是使用 GetKeyState 函数或 GetAsyncKeyState,但没有如何使用它的示例,并且我也检查了 Microsoft 网站上的文档,但仍然不确定如何使用它。
如果这是相关的并且有帮助,我正在使用 Visual Studio,并且在创建此项目时,我选择了空项目,而不是控制台应用程序。
该计划的概要预计如下所示:
这是我迄今为止在主 .cpp 文件中使用的代码:
#ifndef MAINCPP
#define MAINCPP
#include "TwelveClock.h"
#include "TwentyFourClock.h"
#include <iostream>
#include <iomanip>
#include <Windows.h>
using namespace std;
void displayMenu() {
cout << setw(27) << setfill('*') << "" << endl;
cout << "* 1 -- Add One Hour" << setfill(' ') << setw(8) << '*' << endl;
cout << "* 2 -- Add One Minute" << setw(6) << '*' << endl;
cout << "* …Run Code Online (Sandbox Code Playgroud) 给定一个数字数组,查找是否有办法从数组中删除/移除一个数字并在数组中进行一个分区(将数组划分为两个子数组),使得 subarray1 中的元素总和等于 subarray2 中元素的总和.
A subarray is a contiguous part of array.
Array [1, 2, 3, 4] has (1), (1,2), (2,3,4),(1,2,3,4) etc.. as its subarrays but not (1,3) , (2,4) , (1,3,4), etc..
Run Code Online (Sandbox Code Playgroud)
现在让我们考虑一个例子:-
(Follow 0-based indexing )
Array[] = [ 6, 2, 2, 1, 3 ]
Possible solutions
Delete Array[0] => updated array: - [ 2,2,1,3 ]
Possible partition : - [2,2] and [3,1] where (2+2) = (3+1) = 4
or
Delete Array[1] => updated array: - [ …Run Code Online (Sandbox Code Playgroud)