我使用PIL生成了一个图像.如何将其保存到内存中的字符串?该Image.save()
方法需要一个文件.
我想在字典中存储几个这样的图像.
当我第一次使用GCC 4.3编译我的C++代码时(在成功编译它之后没有4.1,4.0,3.4的-Wall -Wextra
选项的警告)我突然遇到了一堆表单错误warning: type qualifiers ignored on function return type
.
考虑temp.cpp
:
class Something
{
public:
const int getConstThing() const {
return _cMyInt;
}
const int getNonconstThing() const {
return _myInt;
}
const int& getConstReference() const {
return _myInt;
}
int& getNonconstReference() {
return _myInt;
}
void setInt(const int newValue) {
_myInt = newValue;
}
Something() : _cMyInt( 3 ) {
_myInt = 2;
}
private:
const int _cMyInt;
int _myInt;
};
Run Code Online (Sandbox Code Playgroud)
跑步g++ temp.cpp …
我正在尝试编写一些代码来测试一堆输入参数的笛卡尔积.
我看过了itertools
,但它的product
功能并不完全是我想要的.是否有一个简单明显的方法来获取具有任意数量的键和每个值中的任意数量的元素的字典,然后产生具有下一个排列的字典?
输入:
options = {"number": [1,2,3], "color": ["orange","blue"] }
print list( my_product(options) )
Run Code Online (Sandbox Code Playgroud)
示例输出:
[ {"number": 1, "color": "orange"},
{"number": 1, "color": "blue"},
{"number": 2, "color": "orange"},
{"number": 2, "color": "blue"},
{"number": 3, "color": "orange"},
{"number": 3, "color": "blue"}
]
Run Code Online (Sandbox Code Playgroud) 是否有一个简单的Git命令来确定存储库中文件的"创建日期",即它首次添加的日期?
如果它甚至可以通过文件重命名/移动来确定它,那将是最好的.我希望它是一个计算机可读的单行输出; 可能是我没有找到正确的git log <fname>
选项来做到这一点.
我有一个具有确定性结果的python函数.运行并生成大量输出需要很长时间:
def time_consuming_function():
# lots_of_computing_time to come up with the_result
return the_result
Run Code Online (Sandbox Code Playgroud)
我time_consuming_function
不时修改,但我想避免它在没有变化的情况下再次运行.[ time_consuming_function
仅取决于为此目的考虑的不可变的功能; 也就是说,它可能有来自Python库的函数,但不能来自我改变的其他代码片段.]向我提出的解决方案是缓存输出并缓存函数的一些"哈希".如果哈希值发生变化,则该函数将被修改,我们必须重新生成输出.
这可能还是荒谬?
更新:基于答案,看起来我想要做的是"memoize" time_consuming_function
,除了代替(或除了)传递给不变函数的参数之外,我想要考虑一个本身会改变的函数.
这是我实际拥有的一些代码的最小测试用例.它在尝试评估时失败a.getResult<B>()
:
test.cpp: In function 'void printStuff(const A&)':
test.cpp:6: error: expected primary-expression before '>' token
test.cpp:6: error: expected primary-expression before ')' token
Run Code Online (Sandbox Code Playgroud)
代码是:
#include <iostream>
template< class A, class B>
void printStuff( const A& a)
{
size_t value = a.getResult<B>();
std::cout << value << std::endl;
}
struct Firstclass {
template< class X >
size_t getResult() const {
X someInstance;
return sizeof(someInstance);
}
};
int main(int, char**) {
Firstclass foo;
printStuff<Firstclass, short int>(foo);
printStuff<Firstclass, double>(foo);
std::cout << foo.getResult< double >() …
Run Code Online (Sandbox Code Playgroud) 是否可以转发声明一个使用默认参数的类而不指定或知道这些参数?
例如,我想boost::ptr_list< TYPE >
在Traits类中声明一个,而不将整个Boost库拖动到包含特征的每个文件中.我想声明
namespace boost { template<class T> class ptr_list< T >; }
,但这不起作用,因为它与真正的类声明不完全匹配:
template < class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
class ptr_list { ... };
Run Code Online (Sandbox Code Playgroud)
我的选择只是与它一起生活或boost::ptr_list< TYPE, boost::heap_clone_allocator, std::allocator<void*>
在我的特质课程中指定吗?(如果我使用后者,我想也必须转发声明boost::heap_clone_allocator
和包含<memory>
,我想.)
我查看了Stroustrup的书,SO和其他互联网,但没有找到解决方案.通常人们担心不包括STL,解决方案是"只包括STL标题".但是,Boost是一个更大规模和编译器密集型的库,因此除非我绝对必须,否则我更愿意将其删除.
我有一个C++模板类base::Foo<class T>
,我在另一个文件中有一个类base::bar::Foo : public base::Foo<Baz>
.Doxygen似乎不喜欢这样,因为它会抛出一个错误
<unknown>:1: Detected potential recursive class relation between class snLib::mocTwod::DsaCell and base class DsaCell< snLib::mocTwod::ProblemTraits, detLib::cellDiffusionTwod::ProblemTraits >!
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种情况发生?Doxygen的文档没有讨论这个错误或关于"潜在的递归类关系"的任何内容.
"基础"类:
/*! \file snlib/DsaCell.hpp
*/
#ifndef snlib_DsaCell_hpp
#define snlib_DsaCell_hpp
#include "Dsa.hpp"
namespace snLib {
/*!
* \brief Implementation of naive cell-centered DSA
*/
template <class HoTraits_T, class LoTraits_T>
class DsaCell : public snLib::Dsa< HoTraits_T, LoTraits_T >
{
[snip]
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
导致问题的一个后代:
/*! \file snlib/twod/moc/DsaCell.hpp
*/
#ifndef snlib_twod_moc_DsaCell_hpp
#define snlib_twod_moc_DsaCell_hpp
#include "snlib/DsaCell.hpp"
#include "ProblemTraits.hpp" …
Run Code Online (Sandbox Code Playgroud) git不可避免的怪癖之一是它无法存储和检索有关文件的元数据.例如,在mac上,标签以"扩展属性"(可访问xattr
)存储,任何checkout/reset/merge/pull命令将在文件受结账影响时删除这些属性.
我已经环顾四周看看是否有人已经编写了保存元数据的脚本,但我干了.
所以我想做的是使用Git的钩子系统:
我应该使用哪个钩子?是post-receive
和pre-commit
所有我需要?可以pre-commit
还添加了一个文件,以提交(即写入新的属性之后)?