小编ans*_*art的帖子

在c ++中返回对象的最佳方法?

当涉及到c ++时,我很吵,返回对象的更好方法是什么?我来自脚本世界,其中对象总是引用,并且我试图实现相同的概念......我基于何时通过引用传递以及何时通过C++中的指针传递?,一个用户说:"一个好的经验法则:"当你需要时使用引用,当你需要时使用指针"."

// basic layer class
class Layer { private: Channel channel; // NEVER NULL };

// return object by pointer
Channel *Layer::getChannel() {
    return &channel;
};

// return by reference
Channel& Layer::getChannel() {
    return channel;
};
Run Code Online (Sandbox Code Playgroud)

第二个版本的问题是编译器将接受这一行:

Channel channel = layer.getChannel();  // creates a copy BAD
Run Code Online (Sandbox Code Playgroud)

应该是什么时候:

Channel &channel = layer.getChannel();  // reference good
Run Code Online (Sandbox Code Playgroud)

有没有办法强制第二个选项的调用者强制它不创建新的通道,或者是第一个选择更好,即使它永远不会是NULL?

c++

13
推荐指数
1
解决办法
2218
查看次数

HTML5和vertical-align?现在修好了?

我来自世界各地,并且一直在寻找谷歌关于做多个包装来垂直对齐内容的资源 - 但它似乎真的很难看.

现在使用HTML5有一种更简单的方法吗?是否有某种实现使用类似HBox/VBox的心态?我看到有非浏览器的例子 - 有合规的方式吗?

现在,任何心智正常的人都能做HTML吗?一团糟!

////编辑

我终于想出了如何在屏幕上垂直对齐整个框,我如何确定如何垂直居中列表项.

我已经尝试了两种方法来对齐这个html:

<nav>
    <ul>
        <li><a href="#!/home">Home</a></li>
        <li><a href="#!/link1">Link #1</a></li>
    </ul>
</nav>
Run Code Online (Sandbox Code Playgroud)

一个使用display:inline,另一个使用float:left(在容器内).当使用内联时,似乎列表项忽略height:css,并且当使用float:时,li中的链接不会垂直对齐.我是否需要将div放在li中以使它们垂直居中?

html5 vertical-alignment css3

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

vec4上的GLSL <>运算符

我正在寻找一些新的GLSL代码,它不能编译到我当前的OpenGL版本,我想知道以下简短形式是什么意思:

vec4 base;

if (base < 0.5) {
    result = (2.0 * base * blend);
}
Run Code Online (Sandbox Code Playgroud)

这相当于:

if (base.r < 0.5 && base.g < 0.5 && base.b < 0.5 && base.a < 0.5) {
    result.r = 2.0 * base.r * blend.r;
    result.g = 2.0 * base.g * blend.g;
    result.b = 2.0 * base.b * blend.b;
    result.a = 2.0 * base.a * blend.a;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

Error:
Fragment shader failed to compile with the following errors:
Wrong operand types no operation '<' …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

10
推荐指数
1
解决办法
1万
查看次数

在boost filesystem :: complete中删除..

这应该很简单:我正在使用boost文件系统编写一个绝对路径,但是它返回了一条非常丑陋的路径:

D:/Projects/SomeDir/vc10/../resource/plugins/SomeFile.dll
Run Code Online (Sandbox Code Playgroud)

是否有一种自动处理的增强方式.和...的?

我所做的只是:

boost::filesystem::complete("../resource/plugins/SomeFile.dll")
Run Code Online (Sandbox Code Playgroud)

它使用boost :: filesystem2.

c++ file-io boost

7
推荐指数
1
解决办法
665
查看次数

临时std :: strings返回垃圾

我还在学习c ++,所以请耐心等待.我正在编写一个关于boost文件系统路径的简单包装器 - 我在返回临时字符串方面遇到了奇怪的问题.这是我的简单类(这不是确切的,但非常接近):

typedef const char* CString;
typedef std::string String;
typedef boost::filesystem::path Path;

class FileReference {

    public:

        FileReference(const char* path) : mPath(path) {};

        // returns a path
        String  path() const {
            return mPath.string();
        };

        // returns a path a c string
        CString c_str() const {
            return mPath.string().c_str();
        };

    private:

        Path    mPath;

}
Run Code Online (Sandbox Code Playgroud)

使用下面的小测试代码:

FileReference file("c:\\test.txt");

OutputDebugString(file.path().c_str()); // returns correctly c:\test.txt
OutputDebugString(file.c_str());        // returns junk (ie îþîþîþîþîþîþîþîþîþîþî.....)
Run Code Online (Sandbox Code Playgroud)

我很确定这必须处理临时工,但我无法弄清楚为什么会这样 - 不应该一切都正确复制?

c++

6
推荐指数
2
解决办法
1105
查看次数

是否可以从 cpp 中定义的静态方法调用私有构造函数?

一个 C++ n00b 问题。是否可以从 cpp 中定义的静态方法调用私有构造函数?如果可能的话,我想将方法​​保留在头文件之外——我认为应该有一种方法可以做到这一点。我在尝试此操作时遇到错误:

“无法访问类 SomeClass 中声明的私有成员”

/////////////////
// SomeClass.h //
/////////////////

class SomeClass {
    public:
        static SomeClass SomeMethod();
    private:
        SomeClass(int i);
}

///////////////////
// SomeClass.cpp //
///////////////////

static SomeClass OSImplementation() {
    return SomeClass(0);
};

// calls implementation
SomeClass SomeClass::SomeMethod() {
    return OSImplementation();
}
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
9609
查看次数

为什么<a>元素不继承子元素的大小

我有一个非常非常简单的HTML,通常HTML中的所有内容似乎都应该正常工作,但在这种情况下,它不会.我认为标签的大小应该继承子图像标签.但在下面的情况下,尺寸是不同的.

HTML:

<a href="."><img src="some image"></a>?
Run Code Online (Sandbox Code Playgroud)

CSS:

a {
    border: 1px solid #000;
    width: auto;
    height: auto;
}

img {
    border: 1px solid #F00;
}
?
Run Code Online (Sandbox Code Playgroud)

为什么不<a>继承图像的大小?(见:http://jsfiddle.net/49ykj/)

到目前为止,这在Firefox和Chrome中都会发生,所以我假设它发生在所有浏览器中.这是一个错误吗?为什么不应该是一个bug?

html css

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

使用"类"容器对象时,Closure Compiler @extends不起作用

我正在为闭包编译器注释我的所有javascript,但是 - 我目前的代码在很大程度上取决于在对象中定义类,即:

Class.SomeClass = function() {};
Class.SomeOtherClass = function() {};
Run Code Online (Sandbox Code Playgroud)

而不是:

function SomeClass() {};
SomeClass.prototype = {};
Run Code Online (Sandbox Code Playgroud)

但是,它在尝试注释扩展时给了我一个警告......编译器声明我无法确定Class.SomeClass是什么类型:

JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type Class.SomeObject 
*  @extends Class.SomeObject
Run Code Online (Sandbox Code Playgroud)

使用ADVANCED_OPTIMIZATIONS将以下代码粘贴到闭包编译器中:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==

(function($) {

    "use strict";

    var Class = {};

    /**
     *  @constructor
     */
    Class.ObjectA = function() {};
    Class.ObjectA.prototype = {};

    /**
     *  @constructor
     *  @extends Class.ObjectA
     */
    Class.ObjectB = function() {};
    Class.ObjectB.prototype = $.extend(new Class.ObjectA(), {
        initialize: function() …
Run Code Online (Sandbox Code Playgroud)

javascript google-closure-compiler

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

为什么我不允许在const引用返回的对象上调用方法?

这是我之前关于在C++中返回引用的问题的后续问题:在c ++中返回对象的最佳方法?

我可以成功返回引用,但是,我无法阻止观察者完全覆盖有问题的变量.我使用了const引用,但我希望观察者能够改变值.

代码如下:

class Layer {
public:
    Channel&        getChannel();
private:
    Channel         channel;
};

// return reference to channel
Channel& Layer::getChannel() {
    return channel;
};

// FINE
layer.getChannel().someMethod();

// BAD: PRIVATE MEMBER IS OVERWRITTEN
layer.getChannel() = Channel();
Run Code Online (Sandbox Code Playgroud)

现在我很确定要防止这个我必须改变函数的签名才能返回const引用,但是,我someMethod之后无法打电话:

// CHANGE TO CONST REFERENCE
Channel const& Layer::getChannel() {
    return channel;
};

// return const ref of channel
Channel const& channel = layer.getChannel();

// ERROR!!
// 'Channel::someMethod' : cannot convert 'this' pointer from 'const Channel' …
Run Code Online (Sandbox Code Playgroud)

c++

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

有关价值类和向量的问题

更多C++学习问题.我一直在使用矢量主要使用原始指针并取得了一定程度的成功,但是,我一直试图使用值对象来代替.我遇到的第一个问题是编译错误.编译下面的代码时出错:

class FileReference {

    public:
        FileReference(const char* path) : path(string(path)) {};
        const std::string path;

};

int main(...) {

    std::vector<FileReference>  files;

    // error C2582: 'operator =' function is unavailable in 'FileReference'
    files.push_back(FileReference("d:\\blah\\blah\\blah"));

}
Run Code Online (Sandbox Code Playgroud)

Q1:我假设它是因为某种方式指定了一个const路径,和/或没有定义赋值运算符 - 为什么默认运算符不起作用?在我的对象上定义const甚至我假设它是因为我定义了一个const路径,const甚至在这里赢得了什么?

Q2:其次,在这些值对象的向量中,我的对象是否对内存安全?(意思是,它们会自动删除给我).我在这里读到默认情况下向量被分配到堆 - 所以这意味着我需要"删除"任何东西.

Q3:第三,为了防止复制整个矢量,我必须创建一个参数,将矢量作为参考传递,如:

// static
FileReference::Query(const FileReference& reference, std::vector<FileReference>& files) {
    // push stuff into the passed in vector
}
Run Code Online (Sandbox Code Playgroud)

返回大型对象的标准是什么,当函数死亡时我不想死.我可以从这里使用shared_ptr或类似的东西中受益吗?

c++

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