我想在我的方法的顶部声明一个数组,但它不是在编译:
Foo Bar()
{
int arr[]; // C2133
// …
// C2059, C2143, C2143
arr[] = {1, 2, 3};
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
更新我知道C++不会强迫我这样做,但是项目的约定要求在方法顶部声明所有变量.
保罗格雷厄姆写道:
例如,类型似乎是取之不尽的研究论文来源,尽管静态类型似乎排除了真正的宏 - 否则,在我看来,没有语言值得使用.
宏有什么大不了的?我没有花很多时间与他们在一起,但是从我使用过的旧版C/C++开始,他们似乎在模板/泛型存在之前主要用作黑客.
这很难想象
DECLARELIST(StrList, string);
StrList slist;
Run Code Online (Sandbox Code Playgroud)
在某种程度上比较好
List<String> slist;
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
然后有作为伪函数的用法,如MAKEPOINTS:
POINTS MAKEPOINTS(
DWORD dwValue
);
Run Code Online (Sandbox Code Playgroud)
为什么不将它定义为函数呢?这是一些优化,您可以避免代码重复,而不会增加另一个堆栈帧的开销吗?
然后还有涉及GOTO的棘手的控制流程,这似乎是值得怀疑的.
宏的优点是什么?它们的类型安全性较低(在C和C++中)(对吧?).没有他们,保罗格雷厄姆为什么不计划?
我有以下结构:
template <typename T>
struct Odp
{
T m_t;
};
Run Code Online (Sandbox Code Playgroud)
我想专门化它,所以我可以添加一个运算符,以便类型与STL集很好地匹配.(我无法Odp直接修改;它是遗留代码.)以下是我看到的两种方法:
struct Ftw : public Odp<int>
{
bool operator==(const Ftw& rhs)
{
return m_t == rhs.m_t;
}
};
struct FtwContain
{
Odp<int> odp;
bool operator==(const FtwContain& rhs)
{
return odp.m_t == rhs.odp.m_t;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有理由比第一个更喜欢第二个?第一种方法似乎允许更清晰的代码:
Ftw ftw;
ftw.m_t = 2;
FtwContain ftwContain;
ftwContain.odp.m_t = 2;
Run Code Online (Sandbox Code Playgroud)
(另外,我很可能对"模板专业化"这个术语的含义感到困惑.)
我是OpenGL的新手.我正在使用JOGL.
我有一个WorldEntity代表可以渲染的东西的类.它有像position和的属性size.要渲染,我一直在使用这种方法:
/**
* Renders the object in the world.
*/
public void render() {
gl.glTranslatef(getPosition().x, getPosition().y, getPosition().z);
gl.glRotatef(getRotationAngle(), getRotation().x, getRotation().y, getRotation().z);
// gl.glScalef(size, size, size);
gl.glCallList(drawID);
// gl.glScalef(1/size, 1/size, 1/size);
gl.glRotatef(-getRotationAngle(), getRotation().x, getRotation().y, getRotation().z);
gl.glTranslatef(-getPosition().x, -getPosition().y, -getPosition().z);
}
Run Code Online (Sandbox Code Playgroud)
我一直在使用的模式是应用实体的每个属性(如位置或旋转),然后撤消它以避免破坏下一个实体被渲染的状态.
取消注释缩放行导致应用程序更加缓慢,因为它在我的适度计算机上呈现适度的场景.我猜测浮动除法太多,无法处理每秒数千次操作.(?)
这是怎样的正确方法?我可以找到一种计算量较小的方法来撤消缩放转换吗?我是否需要按比例对对象进行排序并绘制它们以减少所需的缩放变换?
谢谢.
出于某种原因,此代码将无法编译:
JsonSerializer serializer = new JsonSerializer();
_sectionStories = serializer.Deserialize < IDictionary<int, ObservableCollection<Story>>(new JTokenReader(contents));
Run Code Online (Sandbox Code Playgroud)
错误:
错误91'System.Collections.Generic.IDictionary>'是'类型'但是像'变量'一样使用
我在这做错了什么?我觉得我错过了一些基本的东西.
我正在使用Silverlight 4.我有ItemsControl一个自定义DataTemplate.从那以后DataTemplate,我想绑定到UserControl's中的某些东西DataContext- 而不是DataContextitem控件中的特定元素.有没有办法做到这一点?
我有一个FieldError.
我有一个模特:
class Foo(models.Model):
__bar = models.TextField(default=lambda: cPickle.dumps(set()), primary_key=True)
def get_bar(self):
return cPickle.loads(str(self.__bar))
def set_bar(self, values):
self.__bar = cPickle.dumps(values)
bar = property(get_bar, set_bar)
Run Code Online (Sandbox Code Playgroud)
我已经在admin.py中注册了它:
admin.site.register(Foo)
Run Code Online (Sandbox Code Playgroud)
当我运行服务器并转到/ admin时,我在列表中看到了Foo.如果我单击"添加",它工作正常,显示添加新Foo的表单.但是,如果我点击"保存并添加另一个"或"更改"或"Foos",我会得到一个FieldError
FieldError at /admin/appname/Foo/
Cannot resolve keyword '_Foo' into field. Choices are: _Foo__bar, appname
Run Code Online (Sandbox Code Playgroud)
追溯是:
环境:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/appname/foo/
Django Version: 1.2.4
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'pagination',
'apps.appname']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'pagination.middleware.PaginationMiddleware')
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" …Run Code Online (Sandbox Code Playgroud) 我收到以下代码的错误:
Iterables.any(Lists.<String>newArrayList(), new Predicate<String>() {
@Override
public boolean apply(final String arg0) {
// TODO Auto-generated method stub
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
错误:
Iterable<T>, Predicate<? super T>类型Iterables中的方法any()不适用于arguments(ArrayList<String>, newPredicate<String>(){})
我究竟做错了什么?我觉得我犯了一个愚蠢的错误.
我正在使用F#和Excel Interop.我做的事情如下:
workbook.Range("A1:A10").Value2 <- [| "foo"; "3"; "bar"; "6"; "8" |]
Run Code Online (Sandbox Code Playgroud)
当我查看生成的电子表格时,它将"3","6"和"8"存储为字符串而不是数字.这意味着公式等失败.有没有办法让Excel在适当的位置将字符串转换为数字?
我目前的解决方法是:
workbook.Range("A1:A10").Value2 <- [| "foo" :> obj
3 :> obj
"bar" :> obj
6 :> obj
8 :> obj |]
Run Code Online (Sandbox Code Playgroud)
它产生了预期的效果,但它很尴尬.有一个更好的方法吗?
c# ×2
c++ ×2
java ×2
jogl ×2
audio ×1
coding-style ×1
data-binding ×1
database ×1
django ×1
django-admin ×1
f# ×1
generics ×1
graphics ×1
guava ×1
macros ×1
opengl ×1
python ×1
silverlight ×1
templates ×1
xaml ×1