一个HTTP请求可能有这样的Content-Type标题:
GET / HTTP/1.1
...
Content-Type: text/xml; charset=utf-8
...
Run Code Online (Sandbox Code Playgroud)
是否存在该charset组件是强制性的情况?万一,什么时候?
可能的Content-Type标题示例,不一定正确:
Content-Type: text/xml
Content-Type: charset=utf-8
Content-Type: text/xml; charset=utf8
Content-Type:
Run Code Online (Sandbox Code Playgroud)
标准信息:
编辑注意:似乎这个参考已经过时了,RFC 7231 现在是正确的版本,正如@RobbyCornelissen 所建议的那样。
标准对此说得很少(或者我可能看错了地方):https : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
14.17 内容类型
Content-Type entity-header 字段指示发送给接收者的实体主体的媒体类型,或者在 HEAD 方法的情况下,如果请求是 GET,则将发送的媒体类型。
Run Code Online (Sandbox Code Playgroud)Content-Type = "Content-Type" ":" media-type媒体类型在第 3.7 节中定义。该领域的一个例子是
Run Code Online (Sandbox Code Playgroud)Content-Type: text/html; charset=ISO-8859-4第 7.2.1 节提供了对识别实体媒体类型方法的进一步讨论。
假设一个基类有几个子类:
class Base
{
public:
void printHello() const { cout << "Hello" << endl; }
};
class Child1: public Base {};
class Child2: public Base {};
class Child3: public Base {};
..
class ChildN: public Base {};
Run Code Online (Sandbox Code Playgroud)
假设包含任何包含的类的变体:
using MyVariant = std::variant<Base, Child1, Child2, Child3, ... ChildN>;
Run Code Online (Sandbox Code Playgroud)
注意:与多态指针的简单向量相比,此方法的目的是将所有数据都存储在同一内存阵列中,因为它们将被传输到设备中。在这种情况下,每个对象的真实内容都在矢量中,而不仅仅是指向某个
heap位置的指针 。
最后,假设我要使用Basea的每个元素的多态版本vector<MyVariant>。
std::vector<MyVariant> myVariantList;
... // Initialization
for (const MyVariant& elem: myVariantList)
{
const Base* baseElem = get_if_polymorph<Base>(elem); //HOW TO?
baseElem->printHello();
}
Run Code Online (Sandbox Code Playgroud)
注意:显然,不是 …
这是一个最小的可重现示例,如果太长而无法阅读,请转到包含问题的下一部分,然后根据需要探索代码。
假设一个简单的 C++ 命令行:
主程序
#include <iostream>
#include "Wrapper.h"
int main()
{
Wrapper wrapper;
wrapper.run();
std::cout << "Exiting" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Objective-C 包装器头文件:Wrapper.h
struct OCWrapper;
class Wrapper
{
public:
Wrapper() noexcept;
virtual ~Wrapper() noexcept;
void run();
private:
OCWrapper* impl=nullptr;
};
Run Code Online (Sandbox Code Playgroud)
及其实现:Wrapper.mm
#import "Wrapper.h"
#import "MyOCApp.h"
struct OCWrapper
{
MyOCApp* wrapped=nullptr;
};
Wrapper::Wrapper() noexcept: impl(new OCWrapper)
{
impl->wrapped = [[ MyOCApp alloc] init];
}
Wrapper::~Wrapper() noexcept
{
[impl->wrapped release];
delete impl;
}
void Wrapper::run()
{
[impl->wrapped run];
}
Run Code Online (Sandbox Code Playgroud)
最后是 Objective-C …
使用CMAKE管理项目时QtCreator,一些有用的文件不会显示在项目浏览器中(例如 xml 文件、.ui 文件等)。
有没有办法使用 显式添加自定义文件以在项目中列出CMAKE?
#*************************************************************************
# Indicate a related file for the project, only for convenient showing in
# project, does not mean dependency, inclusion, but just related.
function ("IndicateExternalFile" NAME )
# TODO: No idea how to make this.
endfunction()
Run Code Online (Sandbox Code Playgroud)
到目前为止尝试:
file( GLOB "test.xml") #Not showing.
Run Code Online (Sandbox Code Playgroud) 在自定义中,我需要获取使用 的或文件TComponent的路径。显然,这仅在设计时需要。*.dfm*.pasTComponent
与上一个问题类似:
How to detector the dfm/project path from a custom control while in the Designer?
我创建了一个类似于 TImageCollection 的自定义 TControl,但具有所有应用程序的共享图像数据库。为此,控件读取一个项目元文件,该文件是一个 XML,其中包含要包含在图像集合中的图像列表。在设计器中,图像是直接从图像文件中读取的,但在运行时,图像位于编译期间生成的资源(*.res)文件中。
Run Code Online (Sandbox Code Playgroud)if csDesigning in Self.ComponentState then loadImagesFromFiles(...) else loadImagesFromResource(...)
在以前的版本中(对于上面链接的其他问题),我尝试获取项目的路径,虽然这似乎不可能,但我找到了一种获取活动项目路径的方法。然而,当 IDE 打开多个项目时,这就很成问题了。
我决定改用另一种方法,即使用相对于使用组件的 DFM 的路径。这个应该比较靠谱。
TComponent不幸的是,对于放置在 DFM 上的自定义程序来说,了解 DFM 的位置似乎并不容易。
我尝试了几种解决方案IOTA,但还没有任何效果。
此处提供的方法将路径返回到自身TComponent,而不是返回到使用它的 DFM。
我设法遵循相同的策略迭代模块,但找到哪个模块包含给定的模块TComponent并不简单:
function GetCurrentDfmPath(AComponent: TComponent): String;
var
ModuleServices: IOTAModuleServices;
Module: IOTAModule;
idx: integer;
begin
Result := '';
SourceEditor := nil;
if SysUtils.Supports(BorlandIDEServices, …Run Code Online (Sandbox Code Playgroud) 假设以下示例:
int main()
{
int value=1;
switch( value )
{
case 1:
{
return 0;
} break;
default:
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
从switch案例中返回不是结构化编程,但大多数开发人员认为提前退出是可接受的偏差(维基参考)
大多数现代编译器都会抱怨这段代码,因为:
9: 'break' 永远不会被执行
然而,删除这break句话会引发这样一个问题:“这是一个失败吗?如果是,为什么[[fallthrough]]没有指定属性?”
显而易见的解决方案是一个假设的[[no_fallthrough]],但我在那个方向没有发现任何东西。
我的问题是:
在这种情况下,适当的方法是什么?
- 应该
switch避免返回内部吗?- 应该
break一直用警告吗?- 应该
break删除并注释指示//[[no_fallthrough]]?- 应该
break删除并且开发人员注意到该return语句与 不兼容break,并且交叉手指没有重构会破坏这一点。
通常我在JavaScript中使用对象来保存数据,但事件侦听器不允许辅助指针来检索这些对象.
在事件回调中检索对象指针的最佳方法是什么?(请不要第三方图书馆)
例:
function MyClass()
{
this.number = Math.random();
this.button = document.createElement('div');
this.button.appendChild(document.createTextNode('Show number'));
document.body.appendChild(this.button);
// THIS FOLLOWING LINE REQUIRE CHANGES
this.button.addEventListener('click', MyClass.prototype.listener);
}
MyClass.prototype.listener = function (e)
{
// HERE, "THIS" DO NOT POINT TO MY OBJECT
alert( this.number );
}
testMyClass1 = new MyClass();
testMyClass2 = new MyClass();
Run Code Online (Sandbox Code Playgroud)
目前,我使用静态数组来保存指针,但这很难维护:
//New constructor, first try
function MyClass()
{
this.number = Math.random();
this.button = document.createElement('div');
this.button.appendChild(document.createTextNode('Show number'));
document.body.appendChild(this.button);
if (undefined===MyClass.prototype.register) MyClass.prototype.register = [];
this.id = MyClass.prototype.register.length;
MyClass.prototype.register.push(this);
this.callback = new Function( …Run Code Online (Sandbox Code Playgroud) 我想实现一个成员函数,该函数获取指向其他成员函数的指针并返回静态绑定.可能是什么:a lambda或a? std::function.
从那时起,我在C++ 11中做了以下意图但没有成功:
#include <functional>
#include <iostream>
class MyClass{
public:
auto link( std::function<void(MyClass::*)(int)> func)->std::function<void(int)>
{
return [this, func](int i){func(i);};
}
auto myFunc(int i)->void { std::cout << "Ok:" << i << std::endl; }
auto test ()->void
{
link(&MyClass::myFunc)(4);
}
};
auto main()->int
{
MyClass c;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 从多图切换到unordered_multimap时,我意识到没有等效图:
显然equal_range可以很容易地做到这一点,但是我想知道是否遗漏了一些东西:做出这种选择的原因。
来自任何其他库,我都认为差异是一个简单的错误,但是STL在这方面通常是正交的。
假设有两个类:
Parent = class
public
procedure virtFunc(); virtual;
procedure other();
end;
Child = class(Parent)
public
procedure virtFunc(); override;
end;
Run Code Online (Sandbox Code Playgroud)
通常,从任何地方调用virtFunc实例Child都会调用Child该方法的实现。但是,有时调用相同级别的实现很有用:
procedure Parent.other();
begin
virtFunc(); // I want to call Parent.virtFunc(), not Child.virtFunc()
end;
Run Code Online (Sandbox Code Playgroud)
我尝试了什么?
Parent(Self).virtFunc()
(Self as Parent).virtFunc()
显然,我可以(但这不是问题):
virtual。如何在Delphi中调用方法的当前级别(非多态)版本?
对于那些了解 c++ 的人,我想要一些相当于Parent::virtFunc()
免责声明:我要求“拉撒路”,因为我并不真正关心mode Delphi或mode ObjFPC......
我正在将一些代码从“Delphi 11”翻译到 Lazarus 并发现了这些:
TProc = reference to procedure(const AControl: TControl);
....
proc := MyProcedure;
Run Code Online (Sandbox Code Playgroud)
如果我是正确的,这似乎是对事件回调方法的一些托管引用。
我如何在 Lazarus 下做出等价的东西?
c++ ×4
delphi ×3
c++11 ×1
c++17 ×1
cmake ×1
designer ×1
freepascal ×1
http ×1
http-headers ×1
inheritance ×1
javascript ×1
lambda ×1
lazarus ×1
member ×1
oop ×1
polymorphism ×1
qt-creator ×1
stl ×1
variant ×1