可能重复:
属性与方法
在许多情况下,很明显某些东西应该是属性还是方法,但是有些东西可能被认为是含糊不清的.
明显属性:
明显的方法:
暧昧:
我想我会倾向于模棱两可的方法,但有没有人知道有助于决定这一点的规则或惯例?例如,所有属性应该是O(1)?属性是否应该无法更改其他数据(ColorSaturation可能会更改R,G,B值)?如果有计算或汇总,它不应该是财产吗?
仅仅从学术的角度来看,(而不是因为我认为这是一个好主意)是否有理由不对属性发疯,只是在不参与争论的情况下制作所有类别的审讯,以及可以改变的一切具有单个参数且无法失败的类,属性?
假设我有一个Java接口
public interface Bar {
public void baz(String st)
public void jaz()
}
Run Code Online (Sandbox Code Playgroud)
我想在函数体中的scala中匿名实现上面的接口,如:
def foo() = {
val bar : Bar = new Bar() {
// how to do that ?
}
}
Run Code Online (Sandbox Code Playgroud) 我正在进行大量的科学编程,并使用Boost.Units提供了非常好的经验,它提供了数量的编译时尺寸分析(即带有单位的标签数量,从而通过经典物理尺寸分析捕获了许多误差)并使用了Eigen 2代表线性代数.
然而,Eigen没有单位的概念,虽然你可以在Eigen的矩阵中设置标量,但是它期望两个量的乘法产生相同的类型,这对于单位来说显然是不正确的.例如,代码如:
using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity< si::length >, 2, 1 > meter_vector;
quantity< si::area > norm = meter_vector.squaredNorm();
Run Code Online (Sandbox Code Playgroud)
不起作用,即使它在逻辑上是正确的.
有没有支持单位的矩阵库?我知道这在过去很难实现,而且C++ 11 decltype会更容易实现,但是C++ 03和模板专业化肯定是可能的.
我有一个变量,我正在拉入一个有时是日期的表,有时候是一个字符串.如果变量是日期,我想更改格式:
<td>{{ action.extra_column|date:"M d" }}</td>
Run Code Online (Sandbox Code Playgroud)
但如果它是一个字符串,我只想按原样显示:
<td>{{ action.extra_column }}</td>
Run Code Online (Sandbox Code Playgroud)
如果我尝试格式化它并且它是一个字符串,我得不到该变量的输出.
如何确定类型以便我可以根据类型调整渲染.
除了函数名称本身之外,模板使函数签名的大部分内容都可以参数化.但是也可以参数化成员函数的常量吗?
琐碎,极简主义,非模板化的例子:
struct Foo {
Foo * self() { return this; }
Foo const * self() const { return this; }
};
Run Code Online (Sandbox Code Playgroud)
与稻草人模板假设:
struct Foo {
template<typename T> T self() std::constness_of(T) { return this; }
};
Run Code Online (Sandbox Code Playgroud) 在长时间的Visual C++构建中,听到这样的构建/编译结果的某些(可选)声音真的很有帮助:
有谁知道如何在Visual C++(特别是Vista上的Visual C++ 2008)中为这些类型的构建事件启用声音?
windows visual-studio-2005 visual-studio-2008 visual-studio visual-c++
我是一个c ++开发人员,在c ++中使用了信号和插槽,这对我来说似乎与c#中的委托类似.我发现自己在寻找"绑定"提供的功能时感到茫然,并且觉得我必须遗漏一些东西.
我觉得像C++这样的东西应该可以在带有委托的c#中实现.这里有一些psudo代码,用于我将在c ++中做什么:
Slot<void> someCallback;
int foo(int i)
{
std::cout << "Value: " << i << "\n";
return i;
}
int main()
{
int i = 0;
Slot<int> someCallback = bind( fun_ptr(foo), i );
++i; // added to show that late evaluation would be a non-trivial difference
int result = someCallback();
assert( result == 0 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法找到任何关于c#delegates的绑定/重新绑定的引用.我错过了什么吗?在c#中有一些根本不同的方法吗?
由于标准c#约定是大写公共属性的第一个字母,因此类型名称的初始大写的旧c ++约定和非类型名称的初始小写不会阻止经典名称冲突,其中最明显的对象名称与类型匹配名称:
class FooManager
{
public BarManager BarManager { get; set; } // Feels very wrong.
// Recommended naming convention?
public int DoIt()
{
// 1st and 2nd Bar Manager are different symbols
return BarManager.Blarb + BarManager.StaticBlarb;
}
}
class BarManager
{
public int Blarb { get; set; }
public static int StaticBlarb { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它似乎编译,但感觉很错误.是否有推荐的命名约定来避免这种情况?
有没有办法让valgrind使用多个处理器?
我正在使用valgrind的callgrind进行一些瓶颈分析,并注意到我的应用程序与在valgrind/callgrind之外运行时显着不同的资源使用行为.
当在valgrind外部运行时,它最多可以输出几个处理器,但是在valgrind中运行只使用一个处理器.这让我担心我的瓶颈会在不同的地方,从而使我的分析无效.
也许我误解了技术定义,lower bound但我希望如果我有一个集合a = { 0, 3, 4 }并计算a.lower_bound(2)结果将是0.即我希望std::set::lower_bound接近infimum的数学概念
然而,标准库将其定义为不小于(有效>=)x 的最大数字.
这背后的原因是什么?
c++ ×4
c# ×3
boost ×1
boost-units ×1
c++11 ×1
c++14 ×1
callback ×1
class ×1
const ×1
conventions ×1
currying ×1
delegates ×1
django ×1
eigen ×1
java ×1
methods ×1
multicore ×1
namespaces ×1
profiling ×1
properties ×1
scala ×1
set ×1
stl ×1
templates ×1
types ×1
valgrind ×1
visual-c++ ×1
windows ×1