假设我有一个基本的2D矢量类
class vector2
{
int x, y;
}
Run Code Online (Sandbox Code Playgroud)
这两个值可用于表示位置以及宽度和高度.C++是否为我提供了一个可以实现的功能vector2::getXpos(),然后定义vector2::getWidth()并让它使用相同的实现.
我知道我可以让这两个函数内联,但编译器可能决定不内联这些函数.所以如果getWidth刚刚调用getXpos你最终会有两个函数调用.
我想要使用它的一个更加复杂的例子是getLength()和嗯... getSpan()(当你说40"电视时想到这里的屏幕)
我会假设这将是一个类似于特殊函数定义的简单情况......我确实找到了这个页面,但这听起来像是一个C功能...而且有点破解工作.
编辑
我不是在询问内联函数的机制......我基本上想要在功能上做一些事情
class MyClass
{
void ActaullyDoStuff();
public:
void foo(){ActaullyDoStuff();}
void bar(){ActuallyDoStuff();}
}
Run Code Online (Sandbox Code Playgroud)
但在哪里我可以写出类似的东西
class MyBetterClass
{
public:
void foo(){ /* BLOCK OF CODE */ }
void bar(){ /* DO WHAT EVER foo() DOES */ }
}
Run Code Online (Sandbox Code Playgroud)
我希望bar()成为另一种方式,foo()使得相同的功能代码可以根据情况具有不同的,更合适的名称.
我正在写一个小的本地例程来通知另一个进程用户已经改变了屏幕分辨率.我尝试使用gtk但它在非复合窗口管理器上不稳定并经常崩溃.我正在研究xlib并有一个示例工作,当生成的X Window的大小发生变化时通知我,但我无法弄清楚如何通知屏幕分辨率已经改变.任何帮助,将不胜感激.我包含了我的xlib测试代码和gtk +测试代码,当使用非复合窗口管理器时,如下所示崩溃了很多.
这是我使用xlib的测试代码
Display * display;
int screen;
Window root, window;
display = XOpenDisplay (NULL);
if (!display){ syslog(LOG_INFO, "Could not open display.\n"); }
screen = DefaultScreen(display); root = RootWindow(display, screen);
window = XCreateSimpleWindow (display, root,
0, 0, 300, 300, // xpos, ypos, width, height
0, 0, // border width, border pixel
0 /* background */);
// Add StructureNotifyMask to send us events involving resizing of the window, etc.
XSelectInput (display, window, ExposureMask | StructureNotifyMask);
XMapWindow (display, window);
while (1){ …Run Code Online (Sandbox Code Playgroud) 我有一个REST数据服务,我希望允许用户使用不同的格式(如json,xml,csv)使用HTTP PUT创建新项目.我不确定如何在url中最好地处理格式规范:
PUT /ressource/ID/json
PUT /ressource/ID/xml
Run Code Online (Sandbox Code Playgroud)
要么
PUT /ressource/ID?format=json
PUT /ressource/ID?format=xml
Run Code Online (Sandbox Code Playgroud)
那么指定格式指标的最佳方法是什么?
如果我使用查询参数指定格式并想要PUT如何使用curl执行此操作?
curl -T test/data.json -d "format=json" http://localhost:5000/resource/33
Run Code Online (Sandbox Code Playgroud)
不起作用.
curl -T test/data.json http://localhost:5000/update?format=json
Run Code Online (Sandbox Code Playgroud)
工作,但我宁愿让curl构建查询参数,而不是自己添加它们.
我正在使用一个库来获得'oAuth_token'和'oAuth_token_secret'.
如果我向REST Web服务发出请求,那么这两个密钥如何用于验证身份验证?
编写RESTful API以使用自定义HTTP响应代码时,这是一种不好的做法,例如:

我看到有一个标准的HTTP响应代码列表.但是,通过查看Twitter的API,似乎Twitter尝试在可用时返回标准HTTP响应代码,但是当它们无法将错误与标准HTTP响应对齐时,它们会返回自己的错误代码(如果我错了,请纠正我).
创建RESTful API时,响应代码(尤其是错误)的最佳实践是什么?对Twitter选择使用的做法有何评论?
我试图了解.GetNewClosure()如何在PowerShell 2中的脚本cmdlet上下文中工作。
本质上,我有一个返回像这样的对象的函数:
function Get-AnObject {
param(
[CmdletBinding()]
[Parameter(....)]
[String[]]$Id
..
[ValidateSet('Option1','Option2')]
[String[]]$Options
)
...
$T = New-Object PSCustomObject -Property @{ ..... }
$T | Add-Member -MemberType ScriptProperty -Name ExpensiveScriptProperty -Value {
$this | Get-ExpensiveStuff
}.GetNewClosure()
..
}
Run Code Online (Sandbox Code Playgroud)
如果我没有验证集选项,那么关闭似乎可以正常工作。如果包含它,则新的关闭失败并显示以下错误。
“使用” 0“参数调用” GetNewClosure“的异常:”无法添加属性,因为这将导致带有值的变量Options变得无效。“
大概闭包正在尝试捕获对Cmdlet的调用的上下文。由于参数“ Options”根本没有绑定,因此在参数验证中效果不佳。
我想可以通过将验证作为代码放置在Cmdlet的正文中而不是使用[Validate *()]装饰器来避免这种情况,但这似乎很讨厌并且晦涩难懂。有没有办法融合这两个想法?
编辑
我已经有效地重写了这个问题,以便大大提高其质量 - 如果必须,请参阅修订日志
当我尝试创建顶点缓冲区时,我已将问题缩小到程序的初始化阶段.我目前使用的代码是......
vaoID = new int[1];
gl.glGenVertexArrays(1, vaoID, 0);
gl.glBindVertexArray(vaoID[0]);
vboID = new int[1];
gl.glGenBuffers(1, vboID, 0);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, vboID[0]);
FloatBuffer vData = FloatBuffer.allocate(vertexData.length);
vData.put(vertexData);
vData.rewind();
gl.glBufferData(GL4.GL_ARRAY_BUFFER, vData.capacity() * (Float.SIZE / 8), vData, GL4.GL_STATIC_DRAW);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, 0); // With out this line my code throws the exception
gl.glEnableVertexAttribArray(0);
gl.glVertexAttribPointer(0, 4, GL.GL_FLOAT, false, 0, null); // This is the line where the exception is thrown
gl.glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)
所以是的,目前我的代码能够在没有崩溃的情况下运行,但它必须有一些错误,因为我无法将其渲染.为了缓冲索引数据,我使用了这个代码,它在运行时会成功完成
gl.glGenBuffers(1, bufferIDs, 0);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]);
ShortBuffer iData = ShortBuffer.allocate(indexData.length);
iData.put(indexData);
iData.rewind();
indexCount = …Run Code Online (Sandbox Code Playgroud) 哪个是更好的编码实践,我确信这取决于机器级别的情况.
我应该这样做
if (x == 0)
Run Code Online (Sandbox Code Playgroud)
要么
if (!x)
Run Code Online (Sandbox Code Playgroud) 这可能是一个相当主观的问题,但在这里与我无关.
假设我有一个三角形类,定义类似的东西
class Triangle{
vertex3D vertexs[3];
public:
vertex* GetVertex(int vertexNumber);
}
Run Code Online (Sandbox Code Playgroud)
现在对于大多数正常的应用程序来说,在尝试返回顶点指针之前GetVertex应该确保它vertexNumber是一个有效的索引.我会说通常它可以返回NULL,如果vertexNumber无效,但这不是我真正要问的.
在游戏情况下,检查是否vertexNumber一直有效可能会花费相当多的时间,GetVertex假设只传递有效值会更快.
因此,以轻微的性能提升为基础,三角形基本上可以接受谨慎的风吗?
编辑
好的...所以,如果我在调试中进行边界检查而不是发布...我如何自动执行此操作以便我不必编辑代码...某种编译时间开关或某些东西?会使用#ifdef debug某种东西吗?哪里可以找到更多相关信息?
我有一种偷偷摸摸的感觉,由于编译器,这可能是一个问题.
void SetRenderFunction(void (&newRenderFunction(void)));
这导致GCC宣称我"不能声明对'void'的引用"
现在,我在Windows上的Visual Studio下使用了相同的函数原型(或多或少).在Windows上我有一个不同的函数名称,而不是传递指向一个取消void的函数的指针,它指向我需要的其他一些对象.
如果我使用*而不是&它可以防止这个问题,但是当我尝试传入函数指针时,我会遇到类型转换问题:它试图将它void (*)()转换为void* (*)()
谢谢.
c++ ×3
rest ×3
linux ×2
alias ×1
api ×1
architecture ×1
c# ×1
closures ×1
cmdlet ×1
conceptual ×1
function ×1
gcc ×1
gtk ×1
html ×1
http ×1
java ×1
jogl ×1
oauth ×1
opengl ×1
performance ×1
powershell ×1
validation ×1
vbo ×1
xlib ×1